Рассчитать значение в каждой ячейке в tableView - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь получить итоговое значение из каждой ячейки tableView, чтобы затем добавить к итоговому ярлыку.Поскольку каждая ячейка может иметь различное количество, а также цену, я использую Array s как для количества, так и для продуктов base price.

Я следил за этим вопросом / ответом, ноГлядя на это, человек, спрашивающий, использует структуры: как рассчитать значения в табличном представлении и отобразить в отдельной метке

var total = 0.0
var basePriceArray = [2.45, 18.95, 3.8]
var quantityArray = [2.0, 1.0, 5.0]

cellForRowAt

let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! BasketCell
let basePriceAtIndex = basePriceArray[indexPath.row]
let quantityAtIndex = quantityArray[indexPath.row]
let priceAtIndex = basePriceAtIndex * quantityAtIndex
//When I add the priceAtIndex to the cell label it is calculating perfectly
//ie 4.9, 18.95, 19

//Below is my problem
for _ in productNameArray {
    total += priceAtIndex
}
print(total)

//The total is printing
  14.700000000000001 (ignore the one)
  71.55
  128.55

Выяснив логику, стоящую за ним, он умножает priceAtIndex на количество продуктов в productNameArray (потому что цикл for-in считает количество продуктов).Затем добавляем последнюю цену к следующей, то есть

4,9 x 3 = 14,7

18,95 x 3 = 56,85 + 14,7 = 71,55

19,00 x 3 = 57 + 56,85 +14,7 = 128,55

Я понимаю логику, стоящую за этим, но по какой-то причине не могу выяснить это исправление?

РЕДАКТИРОВАТЬ 1 Забыл упомянуть, что есть 3 продукта вмой productNameArray отсюда х 3

1 Ответ

0 голосов
/ 07 декабря 2018

Я использую Массивы как по количеству, так и по базовой цене

Не делайте этого .Используйте структуру, содержащую как количество и цену, так и вычисленное свойство для продукта

struct Product {

    let name : String

    // many other properties 

    var quantity : Int
    var price : Double

    var priceTotal : Double {
        return Double(quantity) * price
    }
}

и массив источника данных

var products = [Product]()

В cellForRow map продуктов до priceTotal и суммit up

let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! BasketCell

let total = products.map{$0.priceTotal}.reduce(0.0, +)
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 2
cell.textLabel?.text = numberFormatter.string(from: NSNumber(value: total))

Конечно, вам нужно обновить Product экземпляров источника данных, если quantity или price изменится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...