对于斯威夫特来说,是Double?与Optional <double>相同?

时间:2016-07-28 10:35:06

标签: swift optional

    var title: Double? = nil
    var title2 = Optional<Double>.None

上述两件事似乎都表现为可选的双打。但是当我按住选项并点击titletitle2时,它会显示它们有不同的类型。一个是Double?,另一个是Optional<Double>。我只是想知道两者之间是否存在差异。如果他们没有什么不同,为什么甚至有两个呢?是可选的一个客观的C事物,转移到swift或什么?

1 个答案:

答案 0 :(得分:3)

没有区别,这里Double没有什么特别之处。

对于任何类型TT?是(内置编译器) 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上述所有语句都是等效的。