(SWIFT 4)如何计算表视图中indexpath.row列的总和?

时间:2018-11-09 15:33:46

标签: ios

如何计算不同单元格中相同列的总和,而不是同一单元格中的总和。

我不知道该怎么解决。

import UIKit

class ResultViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {

    @IBOutlet var tableview: UITableView!
    @IBAction func backPage(_ sender: Any) {
        self.presentingViewController?.dismiss(animated: true)
    }

    let ad2 = UIApplication.shared.delegate as? AppDelegate

    @IBAction func resetHist(_ sender: Any) {
        ad2?.listPrice = [String]()
        ad2?.listAmt = [String]()

        tableview.reloadData()
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return ad2?.listPrice.count ?? 0
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomTableViewCell

        cell.resultPrice?.text = ad2?.listPrice[indexPath.row]
        cell.resultAmt?.text = ad2?.listAmt[indexPath.row]

        var sum = 0

        // how to calculate sum of the same columns in different cells
        for i in ad2?.listPrice.count {

            sum += Int(ad2?.listPrice[i])

        }

        return cell
    }
}

2 个答案:

答案 0 :(得分:0)

使用compactMapString数组映射到Int,然后使用reduce将各项相加。

let ad2 = UIApplication.shared.delegate as! AppDelegate

...

let sum = ad2.listPrice.compactMap(Int.init).reduce(0, +)

cellForRow是错误的代码位置。

注意:

  • 基本上不使用多个数组作为数据源。
  • 如果listPrice包含数字值,请使用更合适的类型,例如IntDouble
  • 请勿将AppDelegate用作存储数据的常用位置。
  • 如果AppDelegate不存在,该应用程序甚至将无法启动,因此强制转换是绝对安全的。

答案 1 :(得分:0)

如果您想通过尝试的方式枚举元素:

var sum = 0
for pair in listPrice.enumerated() {
    sum += Int(pair.element) //listPrice[pair.index]
}

或者只是使用这个:

let sum = ad2?.listPrice.compactMap(Int.init).reduce(0, +)