Swiftではnil coalescing operator(??演算子)というものが使える。
- 左辺がnilではない場合 -> 左辺を使う
- 左辺がnilであった場合 -> 右辺を使う
という処理を行える。
Swiftでnil coalescing operator(??演算子)を使う
1 2 3 4 5 6 7 8 9 10 11 12 13 |
let str1 = "hoge" let str2: String? = nil let str3: String? = nil let str4 = "fuga" let result1 = str1 ?? str2 let result2 = str3 ?? str4 // 左辺がnilではないのでstr1を使う print(result1) // Optional("hoge") // 左辺がnilであったのでstr4を使う print(result2) // "fuga" |
こんな感じになって、左辺がnilである場合とそうでない場合で、それぞれ右辺と左辺が代入される。
ちなみに出力結果のOptionalが気になる人がいると思うので、そこも軽く。
nil coalescing operatorが行ってる処理
基本的には上で書いたような意味なんだけど、実際には一手間入ってる。順序を入れ替えてみよう。
1 2 3 4 5 |
let str1 = "hoge" let str2: String? = nil print(str1 ?? str2) // Optional("hoge") print(str2 ?? str1) // "hoge" |
実際にやってみると、str1とstr2の順序を入れ替えるだけで出力結果が異なるよ。
- str1がnilではない場合(上)では、アンラップしてstr1を返す
- str1がnilであった場合(下)では、Optionalのままstr2を返す
ってiOS Developer Libraryに書いてあったよ。
なんかややこしいけど、これで納得しよう。