## CLOSURES
閉包(Closures)相當于 OC 中的 blocks,是包含一段代碼的變量,閉包在 Cocoa Touch 中很常見。和方法(function)不同的是,閉包是變量,可以作為參數傳遞或是作為屬性(property)儲存。下面看例子:
~~~
let vw = UIView()
UIView.animateWithDuration(0.5, animations: {
vw.alpha = 0
})
~~~
UIView 的 animateWithDuration 方法要求傳入一個內含動畫內容的閉包,其他的 Cocoa Touch 會幫你實現。之所以要使用閉包作為參數是因為 UIKit 在執行動畫前需要做些準備,如此它會拷貝一份閉包內的代碼并且在準備完成后執行。 以上示例也顯示出在閉包內可以使用其外部的變量,這個特性成為閉包捕獲。在閉包外聲明了 vw 變量,并在閉包中使用了它。這十分有用,但要注意避免強引用循環(一個對象存儲著一個閉包屬性,同時這個屬性又引用了這個對象)。
### Trailing closures
這個特性是 Swift 為了更好的可讀性增加的一個語法甜頭,當方法的最后一個參數是閉包時,為避免閉包內容冗長而導致可讀性下降,可以將代碼段寫在參數括號外,函數會將其自動最為最后一個參數調用:
~~~
UIView.animateWithDuration(0.5){
vw.alpha = 0
} //如果函數只有閉包一個參數,可以省略掉()
~~~
至此 Hacking with Swift 教程的語言基礎部分完成了,接下來開始著手 Project 部分,邊敲項目邊學習。
拓展閱讀:[The new feature of Swift 2.0 by example](https://www.hackingwithswift.com/new-features-swift-2)
*本文根據自己的理解寫下的學習筆記,由于英語和技術水平有限,一定會有不少錯誤和紕漏,請以原文和官方文檔為準,如果能在評論中指出錯誤則感激不盡。*