Всем привет!
У меня есть tableView, это экран корзины, в котором магазины разбиты по секциям. В секциях ячейки с товаром. В этих ячейках есть цена.
Мне необходимо взять эту цену из ячеек секции и положить суммарную цену в секцию. Как это реализовать?
Как достать значения из ячеек для viewForHeaderInSection
Привет! А что делать в том случае, если цены лежат еще на один уровень ниже?
Примерно так -
struct ViewModel {
let name: String?
let offer: [Offers]?
}
struct Offers {
let price: String?
}
В секции я могу спокойно отображать name. Вот так - nameLabel.text = purchasesViewModel[section].name
Выдает ошибку - Initializer ‘init(_:)’ requires that ‘[PurchaseList.Fetch.Offers]’ conform to ‘BinaryInteger’.
Может, это из-за того, что там просто есть еще данные? Я просто коротко записал)
в стуктуре Offers есть также значения Int, Bool.
попробуйте так
var sum = 0
if let priceList = purchasesViewModel[section].offer {
sum = priceList.map { Int($0.price ?? "") ?? 0 }.reduce(0, +)
}
Секции понимает, но выдает по нулям. Просто 0.
Несмотря на это, я параллельно решил запринтить purchasesViewModel. Там значения лежат.
if let priceList = purchasesViewModel[section].offer {
print(priceList)
let intArr = priceList.compactMap { Int($0.price ?? "") }
print(intArr)
sum =intArr.reduce(0, +)
}
Завелось! Поменял на Float.
if let priceList = purchasesViewModel[section].offers {
let sum = priceList.map { Float($0.shortPrice! ) ?? 0 }.reduce(0, +)
priceLabel.text = String(sum)
}
Осталось единственное, в модели Offers есть let count: Int?. В ней лежит количество товара в одной ячейке.
Сейчас в секции теперь показывается сумма всех товаров в ячейках. Но не учитывается, что какой-то товар может быть не в одном количестве.
К примеру, сейчас есть два товара в одной секции:
Товар1 стоит 259,99
Товар2 стоит 68,49.
Суммарно 328,48. Это сейчас показывается в секции.
Но Товар1 в кол-ве 3. Соответсвенно, только его суммарная цена 779,97.
if let priceList = purchasesViewModel[section].offers {
let sum = priceList.map { Float($0.shortPrice! ) ?? 0 * $0.count! }.reduce(0, +)
priceLabel.text = String(sum)
}
Cпасибо огромное, наидобрейший человек!
Кажется, мне стоит поразбираться с функциональным программированием. Есть ли какие-либо книжки по этому? Может, с освоением Rx придет понятие?)
Как удалить секцию в UITableView