この記事は何?
Swiftの??演算子について、調べました。
Swiftを基礎から学ぶには
自著、工学社より発売中の「まるごと分かるSwiftプログラミング」をお勧めします。変数、関数、フロー制御構文、データ構造はもちろん、構造体からクロージャ、エクステンション、プロトコル、クロージャまでを基礎からわかりやすく解説しています。
環境
Swift5.1
Xcode11 beta5
macOS Mojave
Nil-Coalescing Operatorの動作
nil-coalescing 演算子(??)は、次のように記述します。
optionalValue ?? defaultValue
このコードは...
-
optionalValueに値がある場合、アンラップする -
optionalValueがnilの場合、デフォルト値defaultValueを返す
optionalValue は常にオプショナル型です。
defaultValue は、optionalValue の型と一致する必要があります。
nil-coalescing 演算子は、次のコードの省略形です。
optionalValue != nil ? optionalValue! : defaultValue
// optionalValue ?? defaultValue と同じ
上記のコードは、三項条件演算子と強制的なアンラップoptionalValue!を使用して...
-
optionalValueがnilでない場合、optionalValueでラップされた値にアクセス -
optionalValueがnilである場合、defaultValueを返す
_nil-coalescing_演算子は、この条件付きのチェックとアンラップを簡潔で読みやすい形式でカプセル化する、よりエレガントな方法を提供します。
短絡評価
optionalValueの値がnilでない場合、defaultValueの値は評価されません。
これは short-circuit(短絡評価)として知られています。
??演算子の使い方
以下の例では、nil-coalescing 演算子を使用して、デフォルトカラーとオプショナルなユーザー定義カラーを使い分けます。
let defaultColorName = "red"
var userDefinedColorName: String? // 初期値はnil
String?として定義されたuserDefinedColorNameのデフォルト値はnilです。
userDefinedColorNameはオプショナル型であるため、nil-coalescing 演算子を使用して、使用する前に値を評価できます。
次のコードは、??演算子の結果として、変数colorNameToUseに文字列"red"が割り当てられます。
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName は nil
// よって、colorNameToUse に "red" が割り当てられる
userDefinedColorNameはnilであるため、userDefinedColorName ?? defaultColorNameは、defaultColorNameの値"red"を返します。
userDefinedColorNameに具体的な値を割り当ててから、nil-coalescing 演算子によるチェックを再度実行すると...
デフォルトの代わりにuserDefinedColorName内にラップされた値が使用されます。
userDefinedColorName = "green" // 具体的な値を割り当てると...
colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName は nil じゃない
// よって、colorNameToUse に "green" が割り当てられる
```