swiftのguard文の使い方を解説します。
環境
この記事の情報は次のバージョンで動作確認しています。
【Swift】4.1.2
guard文の概要
guard文は想定外の状況が発生した場合に、その処理から抜け出すための構文です。
次のように記述します。
1 2 3 4 5 6 7 |
guard 条件 else { break や return など } |
if文でも同様の処理が書けますが、guard文はスコープから抜ける処理を書かないとエラーになるので、guardが出てくると「必ず処理を抜けるんだな」と分かり、可読性があがります。
オプショナル変数のアンラップ処理に使う
guard文はオプショナル変数のアンラップ処理に使うと大変便利です。
if文を使ったアンラップ処理は、通常次のようになります。
1 2 3 4 5 6 7 |
if str == nil { return // nilの場合 } let unwrappedStr = str! print(unwrappedStr) |
guard文を使うと次のように書けます。
1 2 3 4 5 6 |
guard let unwrappedStr = str else { return // nilの場合 } print(unwrappedStr) // guard文を抜けた後で利用可能 |
if文と違って、guard文で宣言した変数や定数がguard文を終了した後の文で利用可能なのが特徴です。
スコープを抜ける処理
guard文のスコープを抜ける処理としては、次のようなものが使えます。
return 処理を終了し、呼び出し元に戻る
break 繰り返し処理を終了する
continue 処理をスキップする
throw 例外を投げる
abort() プログラムを終了する
break 繰り返し処理を終了する
continue 処理をスキップする
throw 例外を投げる
abort() プログラムを終了する
guardの複数条件
次にように複数条件の記述も可能です。
1 2 3 4 5 6 7 8 |
guard let unwrappedStr1 = str1, let unwrappedStr2 = str2 else { print("不正な文字列です") return } print(unwrappedStr1) print(unwrappedStr2) |
この場合、いずれかの条件が満たされない場合に処理を抜けます。
最後に
guard文を適切に使うと、例外的な状況への対応と、そこからの脱出をコンパクトに記述できるので、ソースが読みやすくなりますね。
あわせて読みたい記事
【Swift】if let とは?
Swiftのコードでよく見かける if let 構文について解説します。