Swift nil值行为

0xS*_*ina 1 objective-c swift

你能发送消息到nilSwift以同样的方式,你可以在Objective-C不导致飞机坠毁?

我试着查看文档,找不到任何与此相关的内容.

dre*_*wag 6

不完全是,你必须使用Optional Chaining.在swift中,实例只能nil是声明为"可选"类型.通常这看起来像这样:

var optionalString : String?
Run Code Online (Sandbox Code Playgroud)

注意?String那之后是什么使得成为可能为零

除非您使用前面提到的可选链接,否则您无法在该变量上调用方法,除非您首先"解包"它.

使用可选链接,您可以深入调用多个方法,这些方法都允许返回nil值:

var optionalResult = optionalString.method1()?.method2()?.method3()
Run Code Online (Sandbox Code Playgroud)

optionalResult也可以是零.如果链中的任何方法返回nil,则不调用其后的方法,而是将OptionalResult立即设置为nil.

在明确处理它为零的情况之前,您无法直接处理可选值.您可以通过以下两种方式之一来实现:

强迫它盲目打开

println(optionalString!)
Run Code Online (Sandbox Code Playgroud)

如果它是nil,这将抛出一个运行时错误,所以你应该非常肯定它不是nil

测试它是否为零

您可以使用简单的if语句来完成此操作:

if optionalString {
    println(optionalString!)
}
else {
    // it was nil
}
Run Code Online (Sandbox Code Playgroud)

或者您可以将其分配给范围变量,这样您就不必强行打开它:

if let nonoptionalString = optionalString {
    println(nonoptionalString)
}
else {
   // it was nil
}
Run Code Online (Sandbox Code Playgroud)