Распаковка необязательного сбоя в Swift
Я новичок, пытающийся понять отладку, и у меня есть проблема, через которую я работаю. Я запросил решение этой проблемы и не нашел его в Stackru. Я стараюсь лучше понять, что здесь происходит и почему происходит этот сбой.
Я отследил ошибку с помощью операторов печати в моем исходном коде. Я добавил оператор print в начало этой функции, чтобы подтвердить, что блок достигнут.
@IBAction func bugTypeSelected(_ sender: UIButton) {
print("bugTypeSelected reached")
bugFactory.currentBugType = BugFactory.BugType(rawValue: Int(sender.currentTitle!)!)!
self.dismiss(animated: true, completion: nil)
}
Когда я запускаю приложение и щелкаю одну из ошибок в модальных настройках, оператор печати выводится на консоль, а затем приложение вылетает. XCode говорит мне, что проблема лежит в этой строке:
bugFactory.currentBugType = BugFactory.BugType(rawValue: Int(sender.currentTitle!)!)!
Ошибка читает
"Поток 1: неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения".
Итак, я понимаю, что использование значения nil приведет к сбою приложения. Я также понимаю, что я работаю с опциями здесь. Я застрял на том, что делать дальше.
1 ответ
Проблема с этой строкой в том, что вы вынуждены распаковывать значения, если значение nil или нет, тип данных, который вы заставляете кастовать, означает, что приложение вылетит
Вместо того, чтобы принудительно развернуть, используйте необязательное развертывание, как показано ниже
if sender.currentTitle != nil {
if let requiredIntValue = Int(sender.currentTitle!){
if let bugType = BugFactory.BugType(rawValue: requiredIntValue)?{
bugFactory.currentBugType = bugType
}
}
}
Надеюсь, что это поможет вам