LoginSignup
208
204

More than 5 years have passed since last update.

Swift 2.0 で追加された guard のいいところ

Last updated at Posted at 2015-10-13

メソッドのはじめに引数の有効性をチェックして、もし不正な値だったらreturnする、というようなコードが書きやすくなる構文です。

func show(message: String?) {

    // messageがnilだったらreturnする
    guard let theMessage = message else { // (1)
        return // (2)
    }

    print(theMessage)
}

(1) messageをアンラップ (messageがnilでなければtheMessageに値が入る)
(2) messageをアンラップできなければ (messageがnilなら) return

いいとこ1: guard文でアンラップした変数を後で使える

よくある if 文でnilチェックする方法だと、nilチェックの後にオプショナル変数をアンラップする必要が出てきます。

func show(message: String?) {
    if message == nil {
        return
    }
    let theMessage = message! // ここ
    // ...
}
func show(message: String?) {
    if message == nil {
        return
    }
    if let theMessage = message { // ここ
        // ...
    }
}

guard を使えばアンラップとnilチェックを同時に行え、アンラップされた変数はguard文を抜けた後でも使用することができます。

func show(message: String?) {
    guard let theMessage = message else {
        return
    }

    print(theMessage) // アンラップした変数を使うことができる
}

いいとこ2: guardの条件に合わなかったらすぐにスコープから抜けることが保証される

guard文の else 節の中では、以下のいずれかを行わないとコンパイルエラーになります。

  1. noreturn アトリビュートの付いた関数 (e.g. プログラム終了) を呼ぶ
  2. 以下のいずれかを書く
    • return
    • break
    • continue
    • throw

よって、チェックに引っかかったけど return を書き忘れて処理が続行される、といううっかりミスがなくなります。

参考

http://furuya02.hatenablog.com/entry/2015/08/15/102224
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/swift/grammar/guard-statement

208
204
1

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
208
204