var title: Double? = nil
var title2 = Optional<Double>.None
上述两件事似乎都表现为可选的双打。但是当我按住选项并点击title
和title2
时,它会显示它们有不同的类型。一个是Double?
,另一个是Optional<Double>
。我只是想知道两者之间是否存在差异。如果他们没有什么不同,为什么甚至有两个呢?是可选的一个客观的C事物,转移到swift或什么?
答案 0 :(得分:3)
没有区别,这里Double
没有什么特别之处。
对于任何类型T
,T?
是(内置编译器)
Optional<T>
的快捷方式。所以
var value: T?
var value: Optional<T>
是等价的。 Optional
符合NilLiteralConvertible
协议,即可以从文字nil
和
var value: T? = nil
var value: T? = .None
var value: T? = Optional.None
var value: T? = Optional<T>.None
var value: T? = T?.None
都是等价的。在前三个语句中,类型
右侧的值Optional<T>
是从左侧的类型注释中推断出来的
侧。最后两个陈述可以缩短为
var value = Optional<T>.None
var value = T?.None
因为从右侧自动推断出类型。
最后,由于选项被隐式初始化为.None
,
上述所有语句都是等效的。