[解決済み] swiftの"? "の意味は何ですか?[重複している]。
2022-03-14 10:18:42
質問
Swiftで二重のクエスチョンマークが使われる構文に出会いました("??")。
例えば
let val = something["something"] as? String ?? nil
これは一体どういうことなのでしょうか?この構文にはどのような使用例がありますか?
どのように解決するのですか?
ニル・コアレスティング演算子
これの省略形みたいなものです。(デフォルト値として
nil
の場合、他の値でもかまいません。
something["something"]
は
nil
またはオプション)
let val = (something["something"] as? String) != nil ? (something["something"] as! String) : "default value"
nil-coalescing演算子(a ?? b)は、オプションのaが値を含んでいればラップを解除し、aがnilであればデフォルトの値bを返します。式aは常にオプショナルな型である。bはaの内部に格納されている型と一致しなければなりません。
nil-coalescing演算子は、以下のコードの略記です。
a != nil ? a! : b 上のコードは、三項条件演算子と強制アンラップ(a!)を使って、aがnilでないときはaの中にラップされている値にアクセスし、それ以外のときはbを返しています。nil-coalescing演算子は、この条件チェックとアンラップを簡潔で読みやすい形でカプセル化する、よりエレガントな方法を提供します。
aの値がnilでない場合、bの値は評価されない。これは短絡的評価と呼ばれる。
以下の例では、nil-coalescing演算子を用いて、デフォルトの色名とオプションのユーザー定義色名のどちらかを選択しています。
let defaultColorName = "red"
var userDefinedColorName: String? // defaults to nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName is nil, so colorNameToUse is set to the default of "red"
セクションを参照 ニル・コアレスティング演算子はこちら
関連
-
[解決済み】「Fatal error: Unexpectedly found nil while unwrapping an Optional value "とはどういう意味ですか?
-
[解決済み] Swift言語におけるエクスクラメーションマークの意味とは?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] YAMLです。YAML の文字列には引用符が必要ですか?
-
[解決済み] SwiftでStringのサブストリングはどのように動作するか
-
[解決済み】swift 4でenumをDecodableにするにはどうすればいいですか?
-
[解決済み】なぜ、Swiftの文字列では、?のような絵文字が奇妙に扱われるのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
スレッド1:シグナルSIGABRTの問題解決
-
[解決済み] Swift stdlib ツール エラー
-
[解決済み] 使用しているSwiftのバージョンを確認するにはどうすればよいですか?
-
[解決済み] Swift における演算子
-
[解決済み] なぜ「Implicitly Unwrapped Optionals」を作るのか、それは値があることを知っていることを意味しているからです。
-
[解決済み] Swift で app delegate への参照を取得するにはどうすればよいですか?
-
[解決済み】==と===の違いについて
-
[解決済み】Swiftの辞書にキーが含まれているかどうかを判断し、その値を取得する。
-
[解決済み】Swiftでオブジェクトが与えられた型かどうかを確認する
-
[解決済み】Swiftで弱参照の配列を宣言するには?