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 }