茶漬けと玉子焼き

swiftとrubyの教室

Swiftでdefer文を使う

Swift2.0から追加されたdefer文。スコープを抜ける際に処理をするものですが、Swift3.0で試してみました。

func myFunc(){
    defer {
        print("defer")
    }
    print("hoge")
}
myFunc()


実行結果は以下のようになります。

hoge
defer



関数以外のスコープで使ってみる
func myFunc2(){
    for i in 0..<3 {
        defer {
            print("defer \(i)")
        }
        print("fuga \(i)")
    }
}
myFunc2()


実行結果

fuga 0
defer 0
fuga 1
defer 1
fuga 2
defer 2



defer文を複数書いてみる
func myFunc3(){
    defer {
        print("hogera")
    }
    defer {
        print("piyo")
    }
    defer {
        print("fuga")
    }
    print("hoge")
}
myFunc3()


実行結果

hoge
fuga
piyo
hogera


使い所

自分の場合は、Swift Perfect のサンプルを触っている時にdefer文を目にしたのですが、そこでは、DBに接続し目的の処理を行った後、defer文内にDBとの接続を切る処理を書く。というように使われていました。
他にも、guard文での必要条件にあっていない場合にdefer文の処理を実行させる。といったような使い方ができるのではないでしょうか。