Swiftのコードでよく見かける if let 構文について解説します。
環境
この記事の情報は次のバージョンで動作確認しています。
【Swift】5.3.1
解説
プロパティのnilチェクとアンラップ処理を同時にやってくれる便利な仕組みです。
1 2 3 4 5 6 7 8 |
if let b = a { // aがnilで無い場合の処理 print(b) } else { // aがnilの場合の処理 } |
変数aがnilで無い場合、定数bにアンラップしたaの値が代入されます。
同時にif文の条件判定は真となり、then節が実行されます。
変数aがnilの場合は、定数bへの代入は行われません。
同時にif文の条件判定は偽となり、else節が実行されますが、定数bは使えません。
動きとしては次のように書いた場合と同じです。
1 2 3 4 5 6 7 8 |
if a != nil { let b = a! print(b) } else { // aがnilの場合の処理 } |
正式な名称はオプショナルバインディング
正式な名称はif letではなくオプショナルバインディングと呼ばれ、実際には変数に代入するif varでもOKです。
オプショナルバインディングは、if以外にwhile文やguard文でも使用できます。
nilの場合に例外処理として処理を抜けるのであればguard文で記述した方がすっきりします。
1 2 3 4 5 6 7 8 9 10 11 |
guard let b = a else { // aがnilの場合の処理 return } // aがnilで無い場合の処理 print(b) ・ ・ |
同じ名前の定数or変数に代入する
代入する定数または変数は同じ名前にもできます。
アンラップするだけの為にわざわざ違う名前を考える必要が無いので使い勝手が良いです。
1 2 3 4 5 6 7 |
if let a = a { print(a) // then節の中ではaは非オプショナル定数として扱われる } else { // aがnilの場合の処理 } |
あわせて読みたい記事
【Swift】guard文の使い方
swiftのguard文の使い方を解説します。