非可选值如何获取 nil 值?

  • 本文关键字:获取 nil 何获取 swift
  • 更新时间 :
  • 英文 :


苹果文档TN2151这样说是出于EXC_BREAKPOINT/SIGTRAP的可能原因:

具有 nil 值的非可选类型

但是像这样的代码无法编译:

var x = "hello"
x = nil

那么在什么情况下非可选可以获得nil值呢?

在桥接到 Swift 的 Objective-C 中考虑这样的事情:

- (NSObject * _Nonnull)someObject {
return nil;
}

该函数被注释为_Nonnull,但将返回 nil。 这作为非可选对象桥接到 Swift 并将崩溃。

人为的,但可能:

class C {}
let x: C? = nil
let y: C = unsafeBitCast(x, to: C.self)
print(y) // boom

在与目标 C 互操作时发生。一个 objc 方法可以注释为nonnull,但没有什么能阻止它返回nil。编译器只捕获最明显的情况,即使这样,它也只会产生警告(例如,当你在指定为不返回 nil 的方法中公然return nil;时(。

最新更新