看起来编译器会在需要时自动将类型转换为可选类型,即使这里没有继承关系。
文档中指定了哪种行为?
func test(value: String?) {
// String passed in is now an optional String instead.
print(value ?? "")
}
// Pass an actual string
test(value: "test")
答案 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
,有两种情况:None
和Some
,用于表示 可能存在或不存在的值。Swift提供了许多涉及此内容的特殊内置行为 库类型:
- 从任何类型
T
隐式转换为相应的可选类型T?
。...
请参阅HTML的htmlpreview.github.io
呈现,以便比.html源更简单地概述文档:
http://htmlpreview.github.io/?https://github.com/apple/swift/blob/master/docs/archive/LangRef.html
htmlpreview of the LangRef.html
at July 25 2017(从哪个州引用上述信息)
现在,这是我推测的,但之所以这不是公开的(并且也不完全是最新的;放在 archive 子文件夹中,仍然使用旧的{ {1}}和None
个案,而不是Some
和none
,可能是因为Swift团队(不再是?)看到一般Swift用户了解有关编译器&#34;魔术&#34;与非常特殊的类型some
相关联,而是关注Optional
的用例和语法(在Swift语言的上下文而不是其编译器中)。