Apple文档提到:
Swift的nil与Objective-C中的nil不同.在Objective-C中,nil是指向不存在的对象的指针.在Swift中,nil不是指针 - 它缺少某种类型的值.任何类型的选项都可以设置为nil,而不仅仅是对象类型
以上知识何时有用?在适用的情况下,编译器会自动将Swift nil转换为Objective-C nil,反之亦然吗?
是的,编译器会将Objective-C nils转换为Swift nils.这就是为什么当从Objective-C翻译时,所有指针都必须成为Swift中的选项.
这些知识的用处正好在您给出的描述中:
任何类型的选项都可以设置为nil,而不仅仅是对象类型
在Swift中,所有类型都可以选择,因此nil.例如,在Objective-C中,您无法使NSInteger为零.
技术上nil只是可选枚举中的一个案例:
enum Optional<T> {
case None
case Some(T)
}
Run Code Online (Sandbox Code Playgroud)
nil只是这个None案子的简写