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