1. ホーム
  2. swift

[解決済み] 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"

セクションを参照 ニル・コアレスティング演算子はこちら