在Swift中处理可选选项的习惯用法似乎过于冗长,如果您只想在nil为零的情况下提供默认值,则它是:
if let value = optionalValue { // do something with 'value' } else { // do the same thing with your default value }
涉及不必要地复制代码,或
var unwrappedValue if let value = optionalValue { unwrappedValue = value } else { unwrappedValue = defaultValue }
这不需要unwrappedValue是常数。
unwrappedValue
Scala的Option monad(与Swift的Optional基本相同)具有getOrElse用于此目的的方法:
getOrElse
val myValue = optionalValue.getOrElse(defaultValue)
我想念什么吗?Swift已经有一种紧凑的方式做到这一点吗?否则,是否可以getOrElse在扩展名中为Optional 定义?
更新资料
苹果现在添加了一个合并运算符:
var unwrappedValue = optionalValue ?? defaultValue
在这种情况下,三元运算符是您的朋友
var unwrappedValue = optionalValue ? optionalValue! : defaultValue
您还可以为Optional枚举提供自己的扩展名:
extension Optional { func or(defaultValue: T) -> T { switch(self) { case .None: return defaultValue case .Some(let value): return value } } }
然后,您可以执行以下操作:
optionalValue.or(defaultValue)
但是,我建议您坚持使用三元运算符,因为其他开发人员无需研究该or方法即可更快地了解这一点。
or
注 :我开始一个模块来添加共同佣工像这样or的Optional以迅速。
Optional