Что я упускаю из виду, когда пытаюсь учесть ноль?

Я перечитывал документацию Swift несколько раз, но боюсь, что упускаю из виду что-то простое.

Функция ниже обрабатывает очень хорошо и правильно вызывает метод updateCalorieBalance, если есть значение в поле caloriesConsumed.text. Но, конечно, вылетает, если caloriesConsumed.text равен нулю.

Я получаю сообщение об ошибке: Неустранимая ошибка: неожиданно найден ноль при развертывании необязательного значения.

Ваша помощь очень ценится.

@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()
}

1 ответ

calConsumed не должен быть необязательной строкой. На самом деле "if let" создает свою собственную переменную, так что теперь у вас есть две переменные с одинаковым именем...

Double (calConsumed) возвращает nil, если calConsumed является пустой строкой или строкой, не содержащей числа.! то, что вы используете, приведет к сбою.

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

(Не проверено и даже не скомпилировано).

Другие вопросы по тегам