[解決済み] 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に変更しました。
関連
-
[解決済み] Xcode 8 シェルスクリプト呼び出しエラー
-
[解決済み] Swift言語におけるエクスクラメーションマークの意味とは?
-
[解決済み] SwiftはPass By ValueかPass By Referenceか
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] なぜ「Implicitly Unwrapped Optionals」を作るのか、それは値があることを知っていることを意味しているからです。
-
[解決済み】Swiftのオプション値とは何ですか?
-
[解決済み】swift言語におけるstructureとclassの比較
-
[解決済み】Swiftの`let`と`var`の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] これを解決するにはどうしたらいいのでしょうか。UILabel.textは、メインスレッドからのみ使用する必要があります。
-
スレッド1:シグナルSIGABRTの問題解決
-
[解決済み] SwiftはPass By ValueかPass By Referenceか
-
[解決済み] SwiftでString.Indexはどのように動作するのか
-
[解決済み] 純粋な」Swift で弱いプロトコル参照を作るには (@objc なしで) どうしたらいいですか?
-
[解決済み] Swift で app delegate への参照を取得するにはどうすればよいですか?
-
[解決済み】swift 4でenumをDecodableにするにはどうすればいいですか?
-
[解決済み]SwiftでErrorタイプでローカライズされた説明を提供する方法は?
-
[解決済み】UIViewControllerの最上位機種を取得する。
-
[解決済み] Swift言語でのエラーハンドリング