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 }