问题描述
我需要在 TableViewCell 标签中显示 Int 以获得总和值。 这是我的代码:
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "eventCell",for: indexPath) as! BudgetTableViewCell
let budgetEvent: BudgetModel
budgetEvent = budgetList[indexPath.row]
cell.nameEventLabel.text = budgetEvent.eventName
cell.spentBudgetLabel.text = String(budgetEvent.spentBudget!)
let totalSpent = budgetList.map{ $0.spentBudget! }.reduce(0,+)
print("sum \(totalSpent)")
return cell
}
当我运行我的应用程序时,我收到错误消息:“线程 1:致命错误:在解开可选值时意外发现 nil”并且值为 nil。
解决方法
您试图强制解开您的值,这不是一个好习惯,好像该值不存在一样,您的应用程序将失败/崩溃。
强制解包意味着您使用 ! 运算符来告诉编译器您确定那里有一个值,我们可以提取它。在以下几行中,您使用了强制展开:
// 1
cell.spentBudgetLabel.text = String(budgetEvent.spentBudget!)
// 2
let totalSpent = budgetList.map{ $0.spentBudget! }.reduce(0,+)
很难判断是哪一个导致了您的错误,但您可以改进代码以帮助您识别问题:
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "eventCell",for: indexPath) as! BudgetTableViewCell
let budgetEvent = budgetList[indexPath.row]
cell.nameEventLabel.text = budgetEvent.eventName
if let spentBudget = budgetEvent.spentBudget {
cell.spentBudgetLabel.text = String(spentBudget)
} else {
print("SpentBudget is empty")
}
let totalSpent = budgetList.compactMap{ $0.spentBudget }.reduce(0,+)
print("sum \(totalSpent)")
return cell
}
我用 map
替换了 compactMap
函数,它只会返回非可选值。您可以阅读有关此 here
你可以这样使用,
cell.spentBudgetLabel.text = String(format: "%d",budgetEvent.spentBudget)