不過在 Swift 裡的作法又變了一個,所以才做了這個教學,
其實 Swift 的 Block 不叫做 Block,叫做 Closures,
它是一個將 Method 當做一個變數使用的應用。
一般的宣告方法如下
var aClosures: (NSString) -> Void = {string in NSLog("String: %@", string) }
Closures 比較特別的是基本宣告都是宣告傳入或傳出的變數型態,
型態所對應變數名稱是在實作的時候才給予,這在基本宣告的時候還可以,
不過下面這個宣告方法就有可能看不懂了。
將 Closures 定義成一個型態之後再宣告
typealias bClosures = (NSNumber!) -> Void var _bClosures:bClosures = {number in NSLog("Number: %@", number) ;}
這時候如果不看這個型態內部定義的變數的話,就會完全不懂 number 這個變數是啥型態了,
這只能說 Swift 的風格特殊了。
接下來,有宣告當然就要有實作 Closures 的 Method,
其實實作 Method 的方法與 Block 的實作 Method 差異比較小,也可以說作法幾乎是相同的。
func methodWithaClosures(aClosures:(NSString) -> Void) { NSLog("String: %@", string) } func methodWithbClosures(closures:bClosures) { closures(NSNumber.numberWithInteger(150)) }
有實作了 Method,這時候就要回到上面將宣告好的 Closures 傳進去了。
var aClosures: (NSString) -> Void = {string in NSLog("String: %@", string) } typealias bClosures = (NSNumber!) -> Void var _bClosures:bClosures = {number in NSLog("Number: %@", number) ;} self.methodWithaClosures(aClosures) self.methodWithbClosures(_bClosures)
教學就到這邊,下次再看看有哪個東西需要教的了。