我們知道在C++和ruby語言的錯誤處理中有一種final機制,發生在無論是否出現錯誤都會執行的情況.這時適合處理收尾或清理工作.
在Swift中同樣存在一個defer語法,後面跟閉包可以完成類似的功能,只不過defer不僅僅可以用在錯誤處理中,它可以用在任何需要清理的情況:
var isTrue = false
func test(name:String)->Bool{
isTrue = true
defer {
isTrue = false
}
print("now isTrue is \(isTrue)")
return name == "hopy"
}
test("hopy")
print(isTrue)
可以看到在test退出之前isTrue都是true,當函數退出後由於前面的defer語句的作用,isTrue會變為false.