发现可选值错误 nil swift 3



我试图为 var 分配一个值,但出现此错误:致命错误:解开可选值时意外发现 nil。

代码:

vehicle.chassis = Chasis.text

但变量不是可选的,我以这种方式声明变量:

var vehicle: Vehicle!

如何解决此问题?

检查图像

您正在尝试将属性设置为不存在的实例,因为隐式解包的可选vehicle为 nil。

如果vehicle为 nil,则无法设置vehicle.chassis

在访问.chassis之前,您必须使用Vehicle实例填充vehicle,例如在init或viewDidLoad等中:

vehicle = Vehicle()

然后,您可以访问.chassis属性:

vehicle.chassis = Chasis.text

为了澄清上述一些评论者已经提到的内容,您将您的属性声明为隐式解包可选 (IUO)。 只有 Swift 中的 optionals 可以为 nil,但 optionals 必须解包,IUO 不需要解包,但可能会崩溃。 IUO的存在有两个原因。

  1. 提供对您的财产的不安全/更原始的访问,以更快地实现根深蒂固的 Objective-C 设计模式。 也就是说,直接作用于可能为零也可能不为零的"指针",并在为时崩溃。
  2. 为属性提供一个非可选接口,您无法保证在类/结构 init 完成时初始化,但您可以保证在使用它时初始化。 对于编译器无法验证但您作为程序员可以验证的内容很有用。

话虽如此,我只能想到 2 种理智的正确方法来以 Swifty 方式使用 IUO,1 是用于 IBOutlets,这些不是由 swift 编译器编译的,在 init() 之后不存在,但保证在你使用它时实现(如果你的笔尖没有损坏),IUO 的完美用例。 另一个,虽然不太必要,因为它可以围绕它进行设计,是你想要延迟读取的数据库模型(无论如何,这本身就有点痛苦)。

最新更新