nil在Objective-C和Swift中是相似但不同的概念。
在Objective-C
nil
表示没有Objective-C对象。
详细地说,id
是任何对象的指针。
nil
id
表示无效。
因此,任何原始类型都不能是nils
例如。
NSString *a = nil (o)
int a = nil (x)
在Swift中
nil
表示没有任何名为Optional的数据类型。
所以nil
是Optional的类型吗?
两种语言,任何nil
类型对象都可以调用函数。
例如。
NSString *name = nil;
[a lowercaseString];
let name: String? = nil
name.lowercased()
两种情况都不会发生零点异常。
怎么能不提出任何类型而且没有任何类型可以调用函数?
答案 0 :(得分:3)
nil是Optional的一种类型吗?
没有。 nil
是Optional<T>.none
的语法糖,其中T
是由可选项包装的类型。
name: String? = nil
name.lowercased()
不,这是非法的。如果您在游乐场尝试,自动填充将插入问号
name?.lowercased()
// ^ here
这基本上意味着如果name不是nil,打开它并调用lowercased()
否则返回nil。
如果你尝试在Objective-C中向nil发送消息,它会有效,因为消息发送功能会检查接收者,如果它是nil,它只返回0,调用者将根据返回值解释类型,它期待例如如果它期望一个int,它将得到0,如果它期望一个Bool它将得到假,如果它期望一个id,它将得到nil。
如上所述,在Swift中,nil是可选枚举的一个值的语法糖。enum Optional<T>
{
case some(T)
case none
}
可选是一个独立的类型,你不能在其上调用包装类型的方法,这就是为什么你必须先用它打开它的原因? post fix operator。