Apple documentation TN2151说明了EXC_BREAKPOINT
/ SIGTRAP
的可能原因:
具有零值的非可选类型
但是像这样的代码不会编译:
var x = "hello"
x = nil
那么在什么情况下非可选的获得nil
值?
答案 0 :(得分:20)
在与Swift桥接的Objective-C中考虑这样的事情:
- (NSObject * _Nonnull)someObject {
return nil;
}
该函数注释为_Nonnull
,但将返回nil。这被桥接为Swift的非可选对象并将崩溃。
答案 1 :(得分:7)
已被控制但可能:
class C {}
let x: C? = nil
let y: C = unsafeBitCast(x, to: C.self)
print(y) // boom
答案 2 :(得分:1)
与Objective C互操作时发生.objc-method可以注释为nonnull
,但没有任何东西可以阻止它返回nil
。编译器只捕获最明显的情况,即使这样,它也只会产生警告(例如,当你在一个被指定为不返回nil的方法中分支return nil;
时。)
答案 3 :(得分:-2)
我当然不知道,但是如果你强行将(!)一个Optional打包到Non-Optional变量中,可能会发生这种情况:
let a : String? = nil
var x = "hello"
x = a!
但这只是猜测...