LoginSignup
18
8

SwiftのNil結合演算子(Nil-Coalescing Operator)

Last updated at Posted at 2019-08-12

この記事は何?

Swiftの??演算子について、調べました。

Swiftを基礎から学ぶには
自著、工学社より発売中の「まるごと分かるSwiftプログラミング」をお勧めします。変数、関数、フロー制御構文、データ構造はもちろん、構造体からクロージャ、エクステンション、プロトコル、クロージャまでを基礎からわかりやすく解説しています。

環境

Swift5.1
Xcode11 beta5
macOS Mojave

Nil-Coalescing Operatorの動作

nil-coalescing 演算子(??)は、次のように記述します。

nil-coalescingの基本
optionalValue ?? defaultValue

このコードは...

  • optionalValueに値がある場合、アンラップする
  • optionalValuenilの場合、デフォルト値defaultValue を返す

optionalValue は常にオプショナル型です。
defaultValue は、optionalValue の型と一致する必要があります。
nil-coalescing 演算子は、次のコードの省略形です。

三項演算子
optionalValue != nil ? optionalValue! : defaultValue
// optionalValue ?? defaultValue と同じ

上記のコードは、三項条件演算子と強制的なアンラップoptionalValue!を使用して...

  • optionalValuenilでない場合、optionalValueでラップされた値にアクセス
  • optionalValuenilである場合、defaultValue を返す

_nil-coalescing_演算子は、この条件付きのチェックとアンラップを簡潔で読みやすい形式でカプセル化する、よりエレガントな方法を提供します。

短絡評価

optionalValueの値がnilでない場合、defaultValueの値は評価されません。
これは short-circuit(短絡評価)として知られています。

??演算子の使い方

以下の例では、nil-coalescing 演算子を使用して、デフォルトカラーとオプショナルなユーザー定義カラーを使い分けます。

コード1
let defaultColorName = "red"
var userDefinedColorName: String?   // 初期値はnil

String?として定義されたuserDefinedColorNameのデフォルト値はnilです。
userDefinedColorNameはオプショナル型であるため、nil-coalescing 演算子を使用して、使用する前に値を評価できます。
次のコードは、??演算子の結果として、変数colorNameToUseに文字列"red"が割り当てられます。

コード2
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName は nil
// よって、colorNameToUse に "red" が割り当てられる

userDefinedColorNamenilであるため、userDefinedColorName ?? defaultColorNameは、defaultColorNameの値"red"を返します。

userDefinedColorNameに具体的な値を割り当ててから、nil-coalescing 演算子によるチェックを再度実行すると...
デフォルトの代わりにuserDefinedColorName内にラップされた値が使用されます。

コード3
userDefinedColorName = "green"    // 具体的な値を割り当てると...
colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName は nil じゃない
// よって、colorNameToUse に "green" が割り当てられる
```
18
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
8