#swift #optional #conditional-operator
#swift #тип параметра #условный оператор
Вопрос:
У меня есть текстовое поле, которое принимает числа.
При нажатии за пределы области цифровой клавиатуры, чтобы отключить клавиатуру, значение текстового поля передается функции.
Когда текстовое поле пустое, я получаю необязательную ошибку NIL unpacked, и она завершается сбоем.
Я пытаюсь найти способ передать «0» переменной, когда в текстовом поле ничего нет.
Переменная
@IBOUTLET weak var per1kCollector: UITextField?
var per1k = 0
Обработчик для закрытия клавиатуры и вызова функции
per1k захватывает текстовое поле
для per1k требуется 0, если collector.text равен НУЛЮ
@objc func handleTap(_ recognizer: UITapGestureRecognizer) {
print("closing number pad")
view.endEditing(true)
per1k = (Int(per1kCollector!.text!)! ?? 0)
doSomeMath()
}
При этом продолжает указываться «не удается преобразовать значение типа ‘int’ в ожидаемый тип аргумента ‘string’. Но я беру значение Int текстового поля, а per1k имеет тип int . ????
Комментарии:
1. Каждый раз, когда в вашем коде указано, что
!
вам следует ожидать сбоя. Постарайтесь избежать этого. В этом очень мало необходимости.2. Также не вводите свой «код» в вопрос. Скопируйте и вставьте реальный код. Такая ерунда, как
@IBOUTLET
, не нужна.3. не уверен, что я вас понимаю. Везде еще, когда я вижу снимки экрана, людям рекомендуется вырезать и вставить, что я и сделал.
4. Нет, вы этого не делали, потому что не существует такой вещи, как
@IBOUTLET
. Ваш код никогда бы не скомпилировался, если бы вы так сказали. Вы получите сообщение об ошибке «Неизвестный атрибут ‘IBOUTLET'».
Ответ №1:
Каждый раз, когда в вашем коде указано, что !
вам следует ожидать сбоя. Постарайтесь избежать этого. В этом очень мало необходимости. В этом случае просто используйте знак вопроса:
per1k = Int(per1kCollector?.text ?? "0") ?? 0
Комментарии:
1. каждый раз, когда я этого не делаю, я продолжаю получать чертовы варианты, чтобы исправить это таким образом … поверьте мне, я пытаюсь
2. Мэтт, спасибо за помощь здесь. Я все еще получаю сообщение об ошибке, что я не могу преобразовать Int в ожидаемую строку аргумента. Я не уверен, на какую строку оно ссылается. значение текстового поля обрабатывается с помощью функции Int(), а переменная в нем была инициализирована как Int.
3. ОК, исправлено, извините за это.