对于 Swift,是 Double?与 Optional<Double> 一样吗?
For Swift, is Double? the same as Optional<Double>?
var title: Double? = nil
var title2 = Optional<Double>.None
上面的两件事似乎都是可选的双打。但是当我按住选项并单击title
和title2
时,它显示它们有不同的类型。一个是 Double?
,另一个是 Optional<Double>
。我只是想知道两者之间是否有区别。如果它们没有什么不同,为什么还要有两个呢? Optional 是一个 objective C 的东西被转移到 swift 还是什么?
没有区别,这里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
,
以上所有都是等价的
var title: Double? = nil
var title2 = Optional<Double>.None
上面的两件事似乎都是可选的双打。但是当我按住选项并单击title
和title2
时,它显示它们有不同的类型。一个是 Double?
,另一个是 Optional<Double>
。我只是想知道两者之间是否有区别。如果它们没有什么不同,为什么还要有两个呢? Optional 是一个 objective C 的东西被转移到 swift 还是什么?
没有区别,这里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
,
以上所有都是等价的