1. ホーム
  2. swift

[解決済み] SwiftでOptionalにデフォルト値を提供する?

2022-04-27 08:51:06

質問

Swiftでoptionalを扱うイディオムは、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モナド(SwiftのOptionalと基本的に同じ考えです)は、メソッド getOrElse このために

val myValue = optionalValue.getOrElse(defaultValue)

何か見落としているのでしょうか?Swiftはすでにそれを行うためのコンパクトな方法を持っていますか?または、失敗した場合、それを定義することは可能ですか? getOrElse を Optional 用の拡張機能で使用できますか?

解決方法は?

更新情報

Appleは現在、合体演算子を追加しています。

var unwrappedValue = optionalValue ?? defaultValue


この場合、三項演算子はあなたの味方です

var unwrappedValue = optionalValue ? optionalValue! : defaultValue

また、Optional enumの拡張機能を独自に用意することも可能です。

extension Optional {
    func or(defaultValue: T) -> T {
        switch(self) {
            case .None:
                return defaultValue
            case .Some(let value):
                return value
        }
    }
}

では、そうすればいいのです。

optionalValue.or(defaultValue)

しかし、私は三項演算子にこだわることをお勧めします。なぜなら、他の開発者が or メソッド

備考 : を始めました。 モジュール を使用して、次のような共通ヘルパーを追加します。 or について Optional をswiftに変更しました。