在 Swift 中展开可选的崩溃

Unwrapping optional crash in Swift

我是新手,正在尝试了解调试,我遇到了一个挑战。 我已查询此问题的解决方案,但未在 Whosebug 中找到。我想更好地理解这里发生的事情以及为什么会发生崩溃。

我已经通过源代码中的打印语句找到了错误。我在这个函数的开头添加了一个打印语句,以确认正在到达该块。

@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!)!)!

错误显示

“Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value.”

所以,我知道使用 nil 值会使应用程序崩溃。我也知道我在这里使用可选项。我不知道下一步该怎么做。

该行的问题是,如果值 nil 或不是您强制转换的数据类型意味着应用程序将崩溃,您将强制取消扭曲值

不要强制展开,而是使用如下所示的可选展开

if sender.currentTitle != nil {
  if let requiredIntValue = Int(sender.currentTitle!){
    if let bugType = BugFactory.BugType(rawValue: requiredIntValue)?{
       bugFactory.currentBugType = bugType
    }
  }
}

希望对您有所帮助