оставляя текстовые поля пустыми - сбой - быстрое 4 - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь создать калькулятор среднего курса с текстовыми полями.Однако, если я хочу ввести только несколько знаков (то есть, не заполняя все текстовые поля), я получаю сбой.

Я получаю эту ошибку:

Поток 1: Неустранимая ошибка: Неожиданно найденnil при развертывании необязательного значения

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

    if b?.text != nil {
        b?.text = String(Double(b!.text!)!/100)
    }
    if d?.text != nil {
        d?.text = String(Double(d!.text!)!/100)

    }
    if f?.text != nil {
        f?.text = String(Double(f!.text!)!/100)
    }
    if h?.text != nil {
        h?.text = String(Double(h!.text!)!/100)
    }

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018
Double(b!.text!)! 

Это причина того, что ваш вводимый текст (b! .Text!) Не конвертируется в удвоение, поэтому заканчивается нулем.

для примера: возможно, вы вводите "12Th45",это не может быть преобразовано в удвоение.

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

Спасибо.

0 голосов
/ 06 декабря 2018

Принудительно развернуть двойное преобразование

Double(b!.text!)!

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

if let tex = b , content = tex.text ,  value = Double(content) {
   print(value)
}

Также не делайте b var необязательным, сделайте это!

 var b:UITextField! // and make sure you init it 

Редактировать: Не создавайте другие переменные для хранения экземпляров, используйте их напрямую

@IBOutlet weak var weight1: UITextField!

if let content = weight1.text ,  value = Double(content) {
   print(value)
   weight1.text = "\(value/100)"
}
...