この記事は何?
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" が割り当てられる
```