SWIFT 4:cellForRowAt跳过最后一行

时间:2018-01-05 15:06:04

标签: ios swift uitableview

我有一个包含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端点来检查硬币值,但我不认为这可能是问题

关于可能发生什么的任何建议?

2 个答案:

答案 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)的打印消息,如果它真的存在于数组中,这是出列后的关键。 。