我对Swift教程感到有些困惑。
nil
只是Optional<T>.None
的便捷快捷方式吗?
是否存在从一个到另一个的隐式转换?
有几点意见:
Optional<String>.None == nil
nil
字面值似乎有NilType
如果这是一个隐式转换,我可以定义我自己的“接受”nil的类型,或者Optional
在这方面有点特别吗?我不认为定义自定义convertible-to-nil类型是个好主意 - 我只是想了解类型系统在这种情况下是如何工作的。
答案 0 :(得分:8)
如果在声明可选项时未提供初始值 变量或属性,其值自动默认为nil。
它们具有相同的值,均为nil
。
实际上Optional<T>.None
是多态原始值,nil
是具有此值的常量。 Optional<T>
是一种多态类型。 nil
的类型为Optional<T>
。这就是为什么你不能将nil
分配给除Optional<T>
以外的任何其他内容。出于同样的原因,您无法将true
分配给除Bool
之外的任何内容。
目前,根据文档,您不能将nil
用于任何自定义和任意类型,而是选项。
nil不能与非可选常量和变量一起使用。如果一个 代码中的常量或变量需要能够应对 在某些条件下没有值,总是将其声明为 适当类型的可选值。