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

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

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

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

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

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

线程的图像

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

  • 可以包含一个值
  • 或根本没有价值(零)

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

let meaningOfLife:Int? = 42 

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

 meaningOfLife = nil 

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

但是,此示例无效:

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

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

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

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

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

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

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

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

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

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

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