是nil和Optional <T>.在Swift中没有相同的东西?

Dan*_*mov 7 null swift

我对Swift教程感到有点困惑.

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

几点意见:

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

如果这是一个隐式转换,我可以定义自己的"接受"nil的类型,或者在Optional某种程度上是特殊的吗?我不认为定义自定义convertible-to-nil类型是个好主意 - 我只是想了解类型系统在这种情况下的工作原理.

mas*_*oud 8

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

两者都有相同的价值nil.

实际上Optional<T>.None是一个多态原始值,并且nil是具有此值的常量.Optional<T>是一种多态类型.类型nilOptional<T>.这就是为什么nil除了一个之外你不能分配给别的东西Optional<T>.出于同样的原因true,除了a之外你不能分配任何东西Bool.

 

目前,根据文档,您不能使用nil任何自定义和任意类型的选项.

nil不能与非可选常量和变量一起使用.如果代码中的常量或变量需要能够在某些条件下处理缺少值,请始终将其声明为相应类型的可选值.