致命错误:在展开可选值(lldb)时意外发现nil

时间:2015-11-26 11:56:01

标签: ios swift

好吧我正在使用AVFoundation来扫描条形码。然后扫描后转到另一个视图。效果很好。但是,随机时间应用程序将崩溃。随着相机预览仍然显示,只是赢了工作。我收到错误:

  

致命错误:在展开Optional值时意外发现nil   (LLDB)

我相信这可能是因为它试图在没有加载的情况下访问某些内容。如果我错了,请纠正我。

所以,我要问的是如何解决这个问题?

如果有任何帮助,我也附上了线程。

image of thread

1 个答案:

答案 0 :(得分:0)

在Swift中,Optionals是一种特殊的通用类型:

  • 可以包含值
  • 或根本没有价值(无)

变量只有在可选时才能为零。你声明一个像这样的可选项:

let meaningOfLife:Int? = 42

问号?在类型声明的末尾表示变量meaningOfLife是可选的。因此,这段代码没问题:

meaningOfLife = nil

变量meaningOfLife是可选的,因此它可以是nil。

但是,此示例无效:

let age:Int = 99
age = nil // This line is not OK

因为年龄不是可选的,所以不能为零!

Optionals是Swift的一个强大功能,因为它们使您的代码更安全,更不容易出错。因此,可选项使您作为开发人员的工作效率更高,因为您花在修复错误上的时间更少。

几乎每种编程语言都有类似于nil的东西。它在JavaScript中未定义,Java中为null,PHP中为NULL。在这些语言中,为了避免使用没有值的变量的运行时错误,您必须记住检查变量是否为null。那是你可以忘记的......

Swift以一种特殊的方式处理选项:它强制开发人员检查变量是否为nil,如果它是可选的。这称为展开。您需要先打开一个可选项才能使用它。

当您忘记打开可选项时,您会在应用运行之前发现,这可以节省您的时间。这样可以提高工作效率,减少错误。

与其他语言不同,Swift会检查选项是否在编译时正确解包。因此,在应用程序运行之前,编译代码时,Swift将检查代码中的每个可选项,并查看是否已正确打开它。

不幸的是,编译器无法捕获一些错误。那时你会看到这个错误。

在您的应用运行时,会发生以下情况:

  • 你强行打开一个可选的!
  • 隐式展开的可选项是nil

在强制解包可选之前,使用if语句检查可选项是否为nil。当optional为nil时,不会执行波形括号{}内的代码。