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

标签 ios swift optional-values

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

if optionalValue != .None {   

... some code ...

}

if optionalValue != nil {   

... some code ...

}

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

最佳答案

在正常使用中没有区别,它们可以互换。 .Nonenil 的枚举表示Optional<T> 实现的(不存在)值枚举。

.None 的等效项和 nil感谢Optional<T>实现 NilLiteralConvertible 的类型协议(protocol),以及 != 的重载和 ==运营商。

如果您希望 nil 可赋值,您可以在自己的类/结构/枚举中实现该协议(protocol),例如:

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

var t: MyStruct = nil

(注意变量没有声明为可选的)

关于ios - 测试 "nil"和 ".None"的可选值有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26363050/

相关文章:

ios - fatal error : unexpectedly found nil while unwrapping an Optional value

swift - swift 中可选值之间的区别?

ios - ContainerView 和 ViewController 之间的数据

iphone - 在 UIScrollView 上拖动图像

ios - 我可以在两个不同的苹果开发者账户上添加一台 iOS 设备吗?

ios - 为什么更改 ViewController 名称后使用未声明的类型?

ios - Xcode 依赖错误

ios - 无法更改 TableView 单元格的行高 - Swift

ios - TRON 网址问题 swift

ios - 解包可选值时意外发现 nil