好吧我正在使用AVFoundation来扫描条形码。然后扫描后转到另一个视图。效果很好。但是,随机时间应用程序将崩溃。随着相机预览仍然显示,只是赢了工作。我收到错误:
致命错误:在展开Optional值时意外发现nil (LLDB)
我相信这可能是因为它试图在没有加载的情况下访问某些内容。如果我错了,请纠正我。
所以,我要问的是如何解决这个问题?
如果有任何帮助,我也附上了线程。
答案 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将检查代码中的每个可选项,并查看是否已正确打开它。
不幸的是,编译器无法捕获一些错误。那时你会看到这个错误。
在您的应用运行时,会发生以下情况:
在强制解包可选之前,使用if语句检查可选项是否为nil。当optional为nil时,不会执行波形括号{}内的代码。