Swift:如何在标签中显示 Int?

问题描述

我需要在 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)