Swift:编译器从类型转换为可选类型

时间:2017-07-25 12:07:13

标签: swift optional

看起来编译器会在需要时自动将类型转换为可选类型,即使这里没有继承关系。

文档中指定了哪种行为?

func test(value: String?) {
    // String passed in is now an optional String instead.
    print(value ?? "")
}

// Pass an actual string
test(value: "test")

1 个答案:

答案 0 :(得分:2)

此行为实际上是在Swift github repo的docs文件夹的隐藏角落中明确记录的。

引用swift/docs/archive/LangRef.html [更改了一些格式; 强调我的]:

  

类型

type ::= attribute-list type-function
type ::= attribute-list type-array

...

type-simple ::= type-optional
     

Swift内置了一小组核心数据类型   编译器。大多数面向用户   数据类型由标准库定义或声明为用户   定义的类型。

     

...

     

可选类型

     

Haskell中存在类似的结构   (Maybe),   Boost库   (Optional),   和C ++ 14   (optional)。

type-optional ::= type-simple '?'-postfix
     

可选类型是库类型Optional<T>的语法糖。   这是一个enum,有两种情况:NoneSome,用于表示   可能存在或不存在的值。

     

Swift提供了许多涉及此内容的特殊内置行为   库类型:

     
      
  • 从任何类型T隐式转换为相应的可选类型T?
  •   
     

...

请参阅HTML的htmlpreview.github.io呈现,以便比.html源更简单地概述文档:

现在,这是我推测的,但之所以这不是公开的(并且也不完全是最新的;放在 archive 子文件夹中,仍然使用旧的{ {1}}和None个案,而不是Somenone,可能是因为Swift团队(不再是?)看到一般Swift用户了解有关编译器&#34;魔术&#34;与非常特殊的类型some相关联,而是关注Optional的用例和语法(在Swift语言的上下文而不是其编译器中)。