我有一个对象数组,每个对象都有属性Price。 我要提取的是每个对象的价格,然后取该价格的总和,最后在标签中显示TotalPrice。 目前,我的价格组合正在疯狂,我不知道为什么。
这是我目前的代码:
class CartViewController: UIViewController {
var productsInCartArray = [Product]()
var productPricesArray = [Float]()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = cartTableView.dequeueReusableCell(withIdentifier: Constants.identifierCartTotalPriceCell, for: indexPath) as! CartTableViewCell
var totalSum: Float = 0
for eachProduct in productsInCartArray{
productPricesArray.append(eachProduct.price)
totalSum = productPricesArray.reduce(0, +)
cell.cartTotalPriceLabel.text = String(totalSum)
return cell
}
}
}
这是屏幕截图:
答案 0 :(得分:1)
您只需要执行以下操作即可计算所有单元格的总数:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = cartTableView.dequeueReusableCell(withIdentifier: Constants.identifierCartTotalPriceCell, for: indexPath) as! CartTableViewCell
let calculate = String(productsInCartArray.map{$0.price}.reduce(0.0, +))
cell.cartTotalPriceLabel.text = "$\(calculate)"
return cell
}
它只是无法计算数量而定,很抱歉我无法提供进一步的帮助
答案 1 :(得分:0)
productPricesArray是实例变量,而不是局部变量,因此,每次生成单元格时,都要向productPricesArray中添加一个元素;如果您有两个单元格,则该数组中将有4个价格。此外,每次在此表上重载Data()时,都会为该数组增加更多价格。
您应该从该方法中拉出该逻辑,并在调用表上的reloadData(或其他加载时间)之前将其触发。
答案 2 :(得分:0)
问题出在productPricesArray.append(eachProduct.price)
中的cellForRow
部分。
好吧,cellForRow
将被多次调用。您不应该在cellForRow
中加入这样的逻辑,这是一个坏主意。
您应该做的是,在致电reloadData
之前计算价格。例如,要以productsInCart
数组添加产品的地方,还应该以{{1}}数组添加产品价格。因此,在productPrices
中,您将只对数组求和。