我对Swift教程有些困惑。 nil是Optional<T>.None的方便缩写吗? 它们之间是否存在隐式转换? 以下是几点观察: Optional<String>.None == nil nil字面量似乎具有NilType 如果这是一种隐式转换,那么我能否定义自己的类型来“接受”nil,或者Optional在这方面是否特殊?我认为定义可转换为nil的自定义类型不是一个好主意——我只是想了解这种情况下类型系统的工作原理。
如果在声明可选变量或属性时不提供初始值,则其值会自动默认为nil。它们的值相同,都是nil。实际上,Optional.None是一个多态原始值,而nil是具有此值的常量。Optional是一个多态类型。nil的类型是Optional。这就是为什么您不能将nil分配给除Optional之外的任何其他内容的原因。出于同样的原因,您不能将true分配给除Bool之外的任何其他内容。目前根据文档,您不能将nil用于任何自定义和任意类型,但可以用于可选项。如果您的代码中的常量或变量需要在某些条件下能够处理缺少值,请始终将其声明为适当类型的可选值。
nil
分配给Optional
,而不能分配给其他任何东西呢?我能定义一个具有相同行为的MyOptional
吗? - Dan Abramov