一尘不染

为Swift中的Optional提供默认值?

swift

在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是常数。

Scala的Option monad(与Swift的Optional基本相同)具有getOrElse用于此目的的方法:

val myValue = optionalValue.getOrElse(defaultValue)

我想念什么吗?Swift已经有一种紧凑的方式做到这一点吗?否则,是否可以getOrElse在扩展名中为Optional 定义?


阅读 316

收藏
2020-07-07

共1个答案

一尘不染

更新资料

苹果现在添加了一个合并运算符:

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方法即可更快地了解这一点。


:我开始一个模块来添加共同佣工像这样orOptional以迅速。

2020-07-07