测试"nil"和".None"的可选项有什么区别?

Fer*_*ics 3 ios optional-values swift

我用快速的语言随处可见,人们使用if语句测试可选值,以便他们可以通过两种方式安全地强制解包:

if optionalValue != .None {   

... some code ...

}
Run Code Online (Sandbox Code Playgroud)

要么

if optionalValue != nil {   

... some code ...

}
Run Code Online (Sandbox Code Playgroud)

有什么区别,它能以某种方式以某种方式影响我的应用程序/代码吗?什么更好?

Ant*_*nio 6

在正常使用中没有区别,它们是可以互换的..None是enum实现的nil(缺少)值的Optional<T>枚举表示.

实现协议的类型以及运算符的重载等同于.None和.nilOptional<T>NilLiteralConvertible!===

如果您希望nil可分配,则可以在自己的类/结构/枚举中实现该协议,例如:

struct MyStruct : NilLiteralConvertible {
    static func convertFromNilLiteral() -> MyStruct {
        return MyStruct() // <== here you should provide your own implementation
    }
}

var t: MyStruct = nil
Run Code Online (Sandbox Code Playgroud)

(注意,变量未声明为可选)