Block & Closures

不管是Block還是Closure在編碼過程中都極大的改善了代碼的結(jié)構(gòu),使其更為緊湊,其值捕獲的特性更是方便,下面記錄一下各類使用方法

Block

本地變量

returnType (^blockName)(parameterTypes) = ^returnType(parameterTypes){...};

屬性

@property (nonatomic, copy, nullablility) returnType (^blockName)(parameterTypes);

方法的參數(shù)

- (void)someMethod:(returnType (^nullability)(parameterTypes))blockName

調(diào)用方法的參數(shù)

[someObject someMethod:^returnType(parameterTypes){...}];

宏定義

// 定義
typedef returnType (^TypeName)(parameterTypes);
// 調(diào)用
TypeName blockName = ^returnType(parameterTypes) {...};

關(guān)于Block內(nèi)存管理,有出門左轉(zhuǎn),看樓主之前的這篇文章

Closure

變量

var closureName: (ParameterTypes) -> (ReturnType)

常量

let closureName: ClosureType = {...}

可選值

var closureName: ((ParameterTypes) -> (ReturnType))?

別名定義

typealias ClosuerType = (ParameterTypes) -> (ReturnType)

作為函數(shù)的調(diào)用參數(shù)

func({ (ParameterTypes) -> (ReturnType) in statements })

函數(shù)參數(shù)

array.sort({ (item1: Int, item2: Int) -> Bool in return item1 < item2 })

隱式類型函數(shù)參數(shù),這種寫法利用了swift的類型推斷特性

array.sort({ (item1, item2) -> Bool in return item1 < item2 })

省略返回值寫法

array.sort({ (item1, item2) in return item1 < item2 })

尾閉包寫法,當(dāng)閉包作為函數(shù)的最后一個參數(shù)的時候,可以使用尾閉包寫法

array.sort{ (item1, item2) in return item1 < item2 }

尾閉包簡寫

array.sort{ return $0 < $1}
array.sort{ $0 < $1 }
array.sort{ < } // swift中的符號其實(shí)是一個函數(shù)

當(dāng)有值捕獲的時候注意循環(huán)引用

array.sort( { [unowned self] (item1: Int, item2: Int) -> Bool in return item1 < item2 } )

優(yōu)化寫法

array.sort{ [unowned selft] in return item1 < item2 }

關(guān)于Closure內(nèi)存管理,有出門右轉(zhuǎn),看樓主之前的這篇文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 86.復(fù)合 Cases 共享相同代碼塊的多個switch 分支 分支可以合并, 寫在分支后用逗號分開。如果任何模式...
    無灃閱讀 1,543評論 1 5
  • 以下翻譯自Apple官方文檔,結(jié)合自己的理解記錄下來。翻譯基于 swift 3.0.1 原文地址 Closure...
    藝術(shù)農(nóng)閱讀 1,705評論 0 3
  • 題目: 當(dāng)代風(fēng)采人物評選活動已產(chǎn)生最后三名候選人,老李,篤學(xué)敏思,矢志創(chuàng)新,為破解生命科學(xué)之謎做出重大貢獻(xiàn),率領(lǐng)團(tuán)...
    wwwbb閱讀 331評論 0 1
  • 第五話 殺人游戲 時間,以它難以察覺的姿態(tài)悄悄地進(jìn)行著?,F(xiàn)在,已經(jīng)是秋季了。街道上飄揚(yáng)著剛剛枯萎的落葉,那淡淡的風(fēng)...
    鄒航閱讀 279評論 0 1
  • 鼻塞、聲嘶、頭痛,癥狀很明顯。一直感覺偏頭疼但確實(shí)摁著不痛。哦,明白了,有一種痛叫內(nèi)傷。這樣一個不眠之夜,我想起了...
    雪輸梅香01閱讀 502評論 2 7

友情鏈接更多精彩內(nèi)容