是nil和Optional <t>。在Swift中没有相同的东西吗?</t>

时间:2014-06-05 10:50:11

标签: null swift

我对Swift教程感到有些困惑。

nil只是Optional<T>.None的便捷快捷方式吗? 是否存在从一个到另一个的隐式转换?

有几点意见:

  • Optional<String>.None == nil
  • nil字面值似乎有NilType

如果这是一个隐式转换,我可以定义我自己的“接受”nil的类型,或者Optional在这方面有点特别吗?我不认为定义自定义convertible-to-nil类型是个好主意 - 我只是想了解类型系统在这种情况下是如何工作的。

1 个答案:

答案 0 :(得分:8)

  

如果在声明可选项时未提供初始值   变量或属性,其值自动默认为nil。

它们具有相同的值,均为nil

实际上Optional<T>.None是多态原始值,nil是具有此值的常量。 Optional<T>是一种多态类型。 nil的类型为Optional<T>。这就是为什么你不能将nil分配给除Optional<T>以外的任何其他内容。出于同样的原因,您无法将true分配给除Bool之外的任何内容。

目前,根据文档,您不能将nil用于任何自定义和任意类型,而是选项。

  

nil不能与非可选常量和变量一起使用。如果一个   代码中的常量或变量需要能够应对   在某些条件下没有值,总是将其声明为   适当类型的可选值。