如何提取和计算具有价格属性的对象数组的价格

时间:2018-06-30 01:52:26

标签: ios swift uitableview nsarray

我有一个对象数组,每个对象都有属性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
            }
        }
 }

这是屏幕截图:

enter image description here

3 个答案:

答案 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中,您将只对数组求和。