对于 Swift,是 Double?与 Optional<Double> 一样吗?

For Swift, is Double? the same as Optional<Double>?

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

上面的两件事似乎都是可选的双打。但是当我按住选项并单击titletitle2时,它显示它们有不同的类型。一个是 Double?,另一个是 Optional<Double>。我只是想知道两者之间是否有区别。如果它们没有什么不同,为什么还要有两个呢? Optional 是一个 objective C 的东西被转移到 swift 还是什么?

没有区别,这里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以上所有都是等价的