Вернуть Double, если UITextField пусто или ноль

Все, что я делаю, попробуйте ахххххх, дает мне фатальную ошибку, найденную ноль, при развертывании необязательного значения.

Да, я знаю, что вы никогда не должны принудительно разворачивать, но Xcode заставляет меня положить проклятый !!

У меня есть поле ввода, которое я вызвал из другой функции, которая должна вернуть Double:

@IBOutlet weak var inputField: UITextField!

// viewDidLoad():
inputField.keyboardType = .decimalPad

// Fail!
func returnDouble() -> Double {
 guard let f = inputField.text else {return 0.00 }
 return Double(f)! 
}

// Fail!
func returnDouble() -> Double {
 // if let f = (inputField.text?.characters.count)! > 0 {} // mega fail
 guard let f = inputField.text else {return 0.00 }
 return Double(f)! 
}

// Fail!
func returnDouble() -> Double {
    if let f = inputField.text {
        return Double(f)!
    } else {
        return 0.00
    }
}

Я потерян в этот момент. Если поле ввода пустое, я должен получить 0.0 или, если нет, то введенное значение. Я также пытался inputField.hasText но я вынужден добавить ! и это также дает сбой. Любой второй глаз, пожалуйста?

1 ответ

Решение

Это может звучать действительно нелогично.

Если вы получаете доступ textField.text когда текстовое поле пусто, вы получаете "" вместо nil,

Все три ваши попытки проверить, если текст nil, Но так как текстовое поле текста почти никогда nilВаши охранные заявления всегда успешны.

Теперь у вас есть переменная f который содержит значение "", Вы передаете это Double инициализатор. Вы в основном пишете:

Double("")!

Что ж, Double("") не удается и возвращается nil, ты тогда заставь его развернуть. БУМ!

Вместо этого вы должны проверить пустую строку:

func returnDouble() -> Double {
    if inputField.text != "" {
        return Double(f)! 
    } else {
        return 0.00 
    }
}
Другие вопросы по тегам