post Image
swiftのguardを使ってみる

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を使用した方が読みやすくなりますね。


『 Swift 』Article List