LoginSignup
30

More than 5 years have passed since last update.

swiftのguardを使ってみる

Last updated at Posted at 2017-02-04

guardとは

guardは条件に一致なかった場合に、処理を中断させるための構文です。
条件に一致ってifと一緒じゃんと最初は思いがちですが、
ifの場合は条件に一致したら何かしらの処理を行うことに対して、
guardの場合は処理を中断させるということがポイントになります。

つまり、条件に一致せず処理を中断させる場合は、if文で処理を中断させるのではなくて、guardで処理を中断させましょうということです。

func guardTest(status: Int) {
    guard status == 0 else { return } // 引数が0でなかったらreturn

    print("guardしません")
}

ifでも書けるのにguardを使うメリットは?

これからguardを覚える場合には、ifでできることをわざわざ覚える必要あるのかよと思いがちですが、それでもguardを使う理由は、可読性が上がることだと思います。

guardが出てきた時点で、処理から抜けるんだなということがわかるので、慣れてくると読みやすいです。

func guardTest(num: Int) {
    guard num == 5 else { print("guardしました") } 
    // 'guard' body may not fall through, consider using 'return' or 'break' to exit the scope

    print("guardしてないよ")
}

このようにif文と同じように条件に一致したら処理を行わせようとすると、エラーが発生します。
returnかbreakを使ってスコープから抜けてくださいねと言ったようなことを言われちゃいます。
if文と同じような処理を行うことができないので、guardが出てきたら処理を途中で抜けるんだなーということがわかると思います。

アンラップするときにも使える

func guardTest(num: Int?) {
    guard let unwrappedNum = num else { return }

    print(num) // Optional(5)
    print(unwrappedNum) // 5
}

guardTest(num: 5)

if文と同じようにnilチェックを行えます。
こちらもnilだったら処理を中断させたいので、処理を中断させる構文であるguardを使用した方が読みやすくなりますね。

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
30