Как достать значения из ячеек для viewForHeaderInSection

swift

#1

Всем привет!
У меня есть tableView, это экран корзины, в котором магазины разбиты по секциям. В секциях ячейки с товаром. В этих ячейках есть цена.
Мне необходимо взять эту цену из ячеек секции и положить суммарную цену в секцию. Как это реализовать?


#2

let sectionSum = arrayWithSectionData.map { $0.price }.reduce(0, +)


#3

Привет! А что делать в том случае, если цены лежат еще на один уровень ниже?
Примерно так -

struct ViewModel {
let name: String?
let offer: [Offers]?
}

struct Offers {
let price: String?
}

В секции я могу спокойно отображать name. Вот так - nameLabel.text = purchasesViewModel[section].name


#4

let sectionSum = purchasesViewModel[section].offer.map { Int($0) }.reduce(0, +)


#5

Выдает ошибку - Initializer ‘init(_:)’ requires that ‘[PurchaseList.Fetch.Offers]’ conform to ‘BinaryInteger’.
Может, это из-за того, что там просто есть еще данные? Я просто коротко записал)
в стуктуре Offers есть также значения Int, Bool.


#6

попробуйте так

var sum = 0
if let priceList = purchasesViewModel[section].offer {
    sum = priceList.map { Int($0.price ?? "") ?? 0 }.reduce(0, +)
}

#7

Секции понимает, но выдает по нулям. Просто 0.
Несмотря на это, я параллельно решил запринтить purchasesViewModel. Там значения лежат.


#8
if let priceList = purchasesViewModel[section].offer {
    print(priceList)
    let intArr = priceList.compactMap { Int($0.price ?? "") }
    print(intArr)
    sum =intArr.reduce(0, +)
}

#9

Завелось! Поменял на Float.

    if let priceList = purchasesViewModel[section].offers {
        let sum = priceList.map { Float($0.shortPrice! ) ?? 0 }.reduce(0, +)
        priceLabel.text = String(sum)
    }

#10

Осталось единственное, в модели Offers есть let count: Int?. В ней лежит количество товара в одной ячейке.


#11

И что нужно с кол-вом сделать?


#12

Сейчас в секции теперь показывается сумма всех товаров в ячейках. Но не учитывается, что какой-то товар может быть не в одном количестве.

К примеру, сейчас есть два товара в одной секции:
Товар1 стоит 259,99
Товар2 стоит 68,49.

Суммарно 328,48. Это сейчас показывается в секции.

Но Товар1 в кол-ве 3. Соответсвенно, только его суммарная цена 779,97.


#13
if let priceList = purchasesViewModel[section].offers {
        let sum = priceList.map { Float($0.shortPrice! ) ?? 0 * $0.count! }.reduce(0, +)
        priceLabel.text = String(sum)
    }

#14

Cпасибо огромное, наидобрейший человек! :slight_smile:
Кажется, мне стоит поразбираться с функциональным программированием. Есть ли какие-либо книжки по этому? Может, с освоением Rx придет понятие?)


Как удалить секцию в UITableView