defer 構文

http://furuya02.hatenablog.com/entry/2015/08/23/055535
go言語やswift2.0で実装されている言語構文。
ブロックの最後に実行する命令を予約しておくといったイメージの構文。
複数のdeferがある場合FILOで実行される。

func f(){
    defer{ print("3") }
    defer{ print("2") }
    print("1")
}
// print "1"
// print "2"
// print "3"

finallyに近い利用方法をする。finallyやusingと違って、リソースの用意とその後始末のコードを近い場所に書けて、インデントも深くしないので魅力的。(IDisposableと一部の機能が被るが)

let st! = OutputStream(path)
st!.open()
defer{ st!.close() } // どこでreturnしても、ファイルが閉じられることが保証される

st!.write(&buffer1, maxLength:100)
if !status { return }

st!.write(&buffer2, maxLength:100)
if !status { return }