我有一个包含14个元素的硬币数组,我使用coins.count作为函数'numberOfRowsInSection'的返回值
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.coins.count
}
但返回单元格的函数仅运行13次(直到索引12)
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let celula = tableView.dequeueReusableCell(withIdentifier: "cellCoin", for: indexPath) as! CoinTableViewCell
print("row " + String(indexPath.row))
let coin = coins[indexPath.row]
investment = coin.value(forKey: "investment") as! Double
viewTotalInvestment += investment
在我创建单元格的同时,它会转到API端点来检查硬币值,但我不认为这可能是问题
关于可能发生什么的任何建议?
答案 0 :(得分:2)
我想在这里非常清楚。整个UITableViewDataSource
协议仅用于显示表视图数据。请勿将其用于任何其他显示目的, 从不 将其用于数据处理。
如果你想计算viewTotalInvestment
,那么就像这样定义
var viewTotalInvestment: Double {
var result = 0.0
for coin in coins {
let investment = coin.value(forKey: "investment") as! Double
result = result + investment
}
return result
}
甚至更好
var viewTotalInvestment: Double {
return coins.reduce(0.0) { result, coin in
let investment = coin.value(forKey: "investment") as! Double
return result + investment
}
}
答案 1 :(得分:0)
CellForRowAt 被调用以仅显示可见的单元格如果您滚动到表格的末尾,您可以在控制台中找到最后一行(13)的打印消息,如果它真的存在于数组中,这是出列后的关键。 。