我用快速的语言随处可见,人们使用if语句测试可选值,以便他们可以通过两种方式安全地强制解包:
if optionalValue != .None {
... some code ...
}
或
if optionalValue != nil {
... some code ...
}
有什么不同之处,它能以某种方式以某种方式影响我的应用/代码吗? 什么更好?
答案 0 :(得分:6)
在正常使用中没有区别,它们是可以互换的。 .None
是由nil
枚号实现的Optional<T>
(缺少)值的枚举表示。
.None
和nil
的等效性归功于实施Optional<T>
协议的NilLiteralConvertible
类型,以及!=
和{{1的重载运营商。
如果您希望nil可分配,则可以在自己的类/结构/枚举中实现该协议,例如:
==
(请注意,该变量未声明为可选)
答案 1 :(得分:3)
如果您按住命令单击.None
,即可获得答案。以下是Swift软件包的内容:
enum Optional<T> : Reflectable, NilLiteralConvertible {
case None
case Some(T)
init()
init(_ some: T)
/// Haskell's fmap, which was mis-named
func map<U>(f: (T) -> U) -> U?
func getMirror() -> MirrorType
static func convertFromNilLiteral() -> T?
}
因此,在大多数情况下,您可以使用其中之一,因为可选值应符合协议NilLiteralConvertible
(尽管我不确定最后一点)。
答案 2 :(得分:0)
没有区别,因为.none
(基本上是Optional.none
)和nil
彼此相等。
实际上,该语句在操场上运行,然后其输出为true
:
nil == .none || print(nil == .none) -> true
使用nil
更常见,这是推荐的惯例。