Objective c 快速零值行为

Objective c 快速零值行为,objective-c,swift,Objective C,Swift,您能否在Swift中以与Objective-C中相同的方式向nil发送消息,而不会导致崩溃 我试图查看文档,但找不到与此相关的任何内容。不完全是,您必须使用。在swift中,如果实例被声明为“可选”类型,则它只能是nil。通常这看起来像这样: var optionalString : String? 请注意字符串后面的?,这就是可能为零的原因 除非首先“展开”该变量,否则无法对该变量调用方法,除非使用前面提到的可选链接 通过可选链接,您可以调用多个deep方法,这些方法都允许返回nil值: v

您能否在
Swift
中以与
Objective-C
中相同的方式向
nil
发送消息,而不会导致崩溃


我试图查看文档,但找不到与此相关的任何内容。

不完全是,您必须使用。在swift中,如果实例被声明为“可选”类型,则它只能是
nil
。通常这看起来像这样:

var optionalString : String?
请注意
字符串后面的
这就是可能为零的原因

除非首先“展开”该变量,否则无法对该变量调用方法,除非使用前面提到的可选链接

通过可选链接,您可以调用多个deep方法,这些方法都允许返回nil值:

var optionalResult = optionalString.method1()?.method2()?.method3()
可选结果
也可以为零。如果链中的任何方法返回nil,则不会调用它后面的方法,而是optionalResult立即设置为nil

在显式处理为nil的情况之前,不能直接处理可选值。您可以通过以下两种方式之一实现:

强迫它盲目地打开 如果它是nil,这将抛出一个运行时错误,因此您应该非常确定它不是nil

测试它是否为零 您可以使用一个简单的if语句来实现这一点:

if optionalString {
    println(optionalString!)
}
else {
    // it was nil
}
或者,您可以将其分配给范围变量,这样就不必强制展开它:

if let nonoptionalString = optionalString {
    println(nonoptionalString)
}
else {
   // it was nil
}

不完全是,你必须使用。在swift中,如果实例被声明为“可选”类型,则它只能是
nil
。通常这看起来像这样:

var optionalString : String?
请注意
字符串后面的
这就是可能为零的原因

除非首先“展开”该变量,否则无法对该变量调用方法,除非使用前面提到的可选链接

通过可选链接,您可以调用多个deep方法,这些方法都允许返回nil值:

var optionalResult = optionalString.method1()?.method2()?.method3()
可选结果
也可以为零。如果链中的任何方法返回nil,则不会调用它后面的方法,而是optionalResult立即设置为nil

在显式处理为nil的情况之前,不能直接处理可选值。您可以通过以下两种方式之一实现:

强迫它盲目地打开 如果它是nil,这将抛出一个运行时错误,因此您应该非常确定它不是nil

测试它是否为零 您可以使用一个简单的if语句来实现这一点:

if optionalString {
    println(optionalString!)
}
else {
    // it was nil
}
或者,您可以将其分配给范围变量,这样就不必强制展开它:

if let nonoptionalString = optionalString {
    println(nonoptionalString)
}
else {
   // it was nil
}

您是否尝试创建一个专门用于测试此功能的新项目?请查看《Swift编程语言》一书中的可选链接章节。@NSArray否。我没有OS X Yosemite,因此无法运行最新的XCode,我只是在网上读到有关它的内容,我很好奇。仅此而已。您是否尝试创建一个专门用于测试此功能的新项目?请查看《Swift编程语言》一书中的可选链接章节。@NSArray否。我没有OS X Yosemite,因此无法运行最新的XCode,我只是在网上读到有关它的信息,并对此感到好奇。就这些,不是零,不是零。Swift使nil不合理地难以表示。@CodaFi可选。None和nil是同一件事。我也不同意这是不合理的困难,我会说这是合理的困难一点夸张来减轻情绪;)。“将Swift与Cocoa和Objective-C结合使用”给我的印象是,它们在语义上可能是等价的,但我怀疑定义上的等价性。再说一次,谁知道呢?@CodaFi,好的。我想我们确实知道
可选。None===nil
返回true。此外,您可以在任何地方使用
可选。无
,您可以使用
nil
。事实上,在视频和书中,苹果几乎总是将其称为
nil
而不是nil,None。Swift使nil不合理地难以表示。@CodaFi可选。None和nil是同一件事。我也不同意这是不合理的困难,我会说这是合理的困难一点夸张来减轻情绪;)。“将Swift与Cocoa和Objective-C结合使用”给我的印象是,它们在语义上可能是等价的,但我怀疑定义上的等价性。再说一次,谁知道呢?@CodaFi,好的。我想我们确实知道
可选。None===nil
返回true。此外,您可以在任何地方使用
可选。无
,您可以使用
nil
。事实上,在视频和书中,苹果几乎总是将其称为
nil