nil 結合演算子 (a ?? b) は、オプショナル a が値を含んでいる場合はアンラップし、a が nil の場合にはデフォルト値 b を返します。式 a は常にオプショナル型です。式 b の型は、a 内に保存される型と一致していなければなりません。

nil 結合演算子は、以下のコードの省略表現です。

a != nil ? a! : b

このコードは三項演算子を使用し、a が nil でない場合は a 内にラップされている値にアクセスするために強制アンラップし、そうでない場合は b を返します。nil 結合演算子は、簡潔で読みやすい形式に条件チェックとアンラップを結合する洗練された方法です。

let defaultColorName = "red"
var userDefinedColorName: String?   // デフォルト nil

var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName は nil であり、デフォルトの "red" が colorNameToUse に設定される

userDefinedColorName 変数は、デフォルト値が nil のオプショナル String として定義されています。userDefinedColorName はオプショナル型であるため、nil 結合演算子を使用することができます。上の例では、String の colorNameToUse 変数の初期値を決めるために使用されています。userDefinedColorName が nil であるため、userDefinedColorName ?? defaultColorName 式は defaultColorName の値、つまり "red" を返します。

userDefinedColorName に nil でない値を代入し、nil 結合演算子チェックをあらためて実行した場合には、デフォルト値の代わりにuserDefinedColorName 内にラップされた値が使用されます。

userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName は nil でないため、"green" が colorNameToUse に設定される

Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.