UILabel сумма нескольких Label

xcode
swift
ios

#1

Добрый день, я только учусь.
вот у меня есть несколько UILabel и я понятия не имею как мне сделать чтобы в фиолетовом лейбле суммировалась вся сумма/количество (искал в интернетах, ничего не смог найти подходящего) буду рад помощи и советам, всем заранее спасибо и хорошего дня


#2

Объедените все лейблы в один аутлет (объединяйте по соответствующим группам)
@IBOutlet var sumLabels: [UILabel]!
А дальше суммируете, но сперва приводите все в Int
let sum = sumLabels.map { Int($0.text ?? "") }.sum()


#3

Спасибо, можешь мне написать в Телеграмм, у меня просто ещё есть пару вопросов, чтобы не засорять эту тему и сам форум


#4

Такого не имеем…


#5

Кстати, еще совет на будущее. Делайте такой UI через таблицу. В случае каких либо изменений замахаетесь обновлять это все.
Да и с расширением у таблицы будет все просто и быстро.
Тогда правда сумма всех лейблов немного по другому будет вычисляться.


#6

А ещё лучше всё кодом через динамическую табличку с датасорсем, чтобы любой момент подкинуть новые строки. :smile:


#7

я как не очень шарю во всем этом, прошу показать или объяснить как это сделать, пример может какой-то (можно и не на моем коде, чтобы не делать роботу за меня, но чтобы я мог как-то дойти к тому что сделаю это, а то по вашим словам очень все как-то просто и понятно, а мне реализовать очень тяжело)


#8

ну я это про это и расписывал


#9

создаете енум, обозначаете каждое нужное поле. подписываете енум под протокол CaseIterable вроде.
далее работаете с обычным заполнением таблицы. в качестве данных будет выступать EnumClass.allCases, это вернет массив всех значений енума. Надеюсь с заполнением таблицы массивом строк умеете пользоваться, вот это и получится.
В будущес енум можно расширять, добавлять новые напитки, при этом с таблицей ничего делать не надо будет, напитки сами там добавятся. В этом и вся простота.
Внутри енума можно создавать внутренние свойства, вычисляемые на основе конкретного value.
К примеру

var color: UIColor {
    switch self {
    case .late: return .red
    case .americano: return .brown
    // и так далее
    }
}

Так можно создавать любые ограничения или что-то другое.
Пользоваться в таблице этим так

let cell = tableView.dequeue(...)
let drink = EnumClass.allCases[indexPath.row]

cell.backgroundColor = drink.color
...

Таким образом у вас не будет тонны элементов в сторибоарде, не надо будет заморачиваться с ними, выставлять констрейнты, стили и прочее. Будет только одна таблица. Так же будет только один класс для ячейки, где будут общие элементы в одном экземпляре (название напитка, степпер, лейбл с ценой, лейбл с кол-вом). А ну и второй класс ячейки, который будет показывать суммы.
Как получить сумму из всех ячеек, можете поискать тут на форуме, были такие вопросы. Или поискать в гугле. Вариантов разных достаточно. Но лучше сперва попробовать сделать самому как получится.


#10

Спасибо за информацию, очень рад что помогаете
Надеюсь что все выйдет, а то будет неловко сюда возвращаться снова за помощью
Хорошего вечерочка :blush:


#11

как самый простой вариант можно сделать кнопку, по нажатию на которую будут суммироваться значения отдельных лейблов и итоговая сумма будет показываться на фиолетовом лейбле.

Тем более, что у вас уже в степперах есть все значения и в формате Int. Осталось только их суммировать, перевести в String и присвоить итоговому лейблу.

Это конечно на самый оптимальный вариант по сравнению с теми, которые вам предложили, но для начальной тренировки и понимания работы Xcode вполне подойдет.