LoginSignup
73
65

More than 3 years have passed since last update.

Swift 2のdefer文

Last updated at Posted at 2015-06-08

Swift 2ではdefer文が追加されました。これはGoにあるdefer文とほぼ同じもので、スコープを抜ける際に処理を実行するようにするものです。

func myfunc() {
    defer {
        // Swift 2からprintlnはなくなり、printになりました
        print("deferred")
    }
    print("Hello, World!")
}

myfunc()

結果は以下のようになり、defer文がmyfunc()の最後に実行されていることがわかります。

Hello, World!
deferred

次に、同じスコープに複数のdefer文を記述してみます。

func myfunc2() {
    defer {
        print("deferred 1")
    }
    defer {
        print("deferred 2")
    }
    defer {
        print("deferred 3")
    }
    print("Hello, World!")
}

myfunc2()

結果は以下のようになり、Goと同じようにコード上の記述と逆順で実行されます。

Hello, World!
deferred 3
deferred 2
deferred 1

次に、関数以外のスコープにdefer文を記述してみます。

func myfunc3() {
    for i in 0..<3 {
        defer {
            print("deferred \(i)")
        }
        print("Hello, \(i)")
    }
}

myfunc3()

結果は以下のようになり、関数以外のスコープでもそのスコープを抜ける際にdefer文は実行されます。

Hello, 0
deferred 0
Hello, 1
deferred 1
Hello, 2
deferred 2

Goではリソースのクローズなどを行う際にdefer文が重宝されますが、Swiftでも同様のケースで活用できそうです。

73
65
0

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
73
65