Swift nil与Objective-C nil不同

Boo*_*oon 0 objective-c swift

Apple文档提到:

Swift的nil与Objective-C中的nil不同.在Objective-C中,nil是指向不存在的对象的指针.在Swift中,nil不是指针 - 它缺少某种类型的值.任何类型的选项都可以设置为nil,而不仅仅是对象类型

以上知识何时有用?在适用的情况下,编译器会自动将Swift nil转换为Objective-C nil,反之亦然吗?

dre*_*wag 7

是的,编译器会将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案子的简写

  • 我正在寻找这样的东西:Optional.None === nil.我验证了确实如此.谢谢. (2认同)