(SWIFT 4) 如何计算tableview中indexpath.row列的总和?
(SWIFT 4) How to calculate sum of the columns indexpath.row in the tableview?
如何计算不同单元格中相同列的总和,而不是同一单元格中的总和。
不知道怎么解决
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
}
}
使用 compactMap
将 String
数组映射到 Int
并使用 reduce
对项目求和。
let ad2 = UIApplication.shared.delegate as! AppDelegate
...
let sum = ad2.listPrice.compactMap(Int.init).reduce(0, +)
和cellForRow
是代码的错误位置。
备注:
- 基本不使用多个数组作为数据源
- 如果
listPrice
包含数值,请使用更合适的类型,例如 Int
或 Double
。
- 不要将
AppDelegate
用作存储数据的常用位置。
- 如果
AppDelegate
不存在,该应用甚至不会启动,因此强制施放它是绝对安全的。
如果您想按照您尝试的方式枚举元素:
var sum = 0
for pair in listPrice.enumerated() {
sum += Int(pair.element) //listPrice[pair.index]
}
或者只使用这个:
let sum = ad2?.listPrice.compactMap(Int.init).reduce(0, +)
如何计算不同单元格中相同列的总和,而不是同一单元格中的总和。
不知道怎么解决
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
}
}
使用 compactMap
将 String
数组映射到 Int
并使用 reduce
对项目求和。
let ad2 = UIApplication.shared.delegate as! AppDelegate
...
let sum = ad2.listPrice.compactMap(Int.init).reduce(0, +)
和cellForRow
是代码的错误位置。
备注:
- 基本不使用多个数组作为数据源
- 如果
listPrice
包含数值,请使用更合适的类型,例如Int
或Double
。 - 不要将
AppDelegate
用作存储数据的常用位置。 - 如果
AppDelegate
不存在,该应用甚至不会启动,因此强制施放它是绝对安全的。
如果您想按照您尝试的方式枚举元素:
var sum = 0
for pair in listPrice.enumerated() {
sum += Int(pair.element) //listPrice[pair.index]
}
或者只使用这个:
let sum = ad2?.listPrice.compactMap(Int.init).reduce(0, +)