2

我已经多次重读 Swift 文档,但恐怕我在这里忽略了一些简单的东西。

如果字段caloriesConsumed.text 中有值,则下面的函数处理得很好并正确调用updateCaloriBalance 方法。但是,如果caloriesConsumed.text 为nil,当然会崩溃。

我得到的错误消息是:致命错误:在展开可选值时意外发现 nil。

非常感谢您的帮助。

@IBAction func buttonThree(sender: AnyObject) {

    var calConsumed: String?

    if let calConsumed = caloriesConsumed.text {
        calorieCount.updateCalorieBalance(Double(calConsumed)!)
        balanceLabel.text = "New Balance: \(Int((calorieCount.getCalorieBalance())))"
    } else {
        balanceLabel.text = "Please enter calories to add."
    }

    caloriesConsumed.resignFirstResponder()
}
4

1 回答 1

1

calConsumed 不应是可选字符串。实际上,“if let”创建了自己的变量,所以你现在有两个同名的变量......

如果 calConsumed 是空字符串或不包含数字的字符串,则 Double (calConsumed) 返回 nil。这 !你使用它会使它崩溃。

if let calText = caloriesConsumed.text, 
       calNumber = Double (calText) {
    ...
}

(未经测试甚至编译)。

于 2016-03-21T00:49:42.857 回答