OC 方法的調(diào)用都是通過 [] 實現(xiàn)的,如果想要連續(xù)調(diào)用就要進行多層嵌套,我們可以利用 block 的來實現(xiàn) Objective-C 方法的鏈?zhǔn)秸{(diào)用。像這種用于特定領(lǐng)域的表達(dá)方式,我們叫做 DSL (Domain Specific Language)。
關(guān)于 block 的用法
1、函數(shù)式編程
把 block 當(dāng)做函數(shù)的參數(shù),可以把邏輯和函數(shù)放在調(diào)用時候的 block 里面,而不是方法內(nèi)部。把相關(guān)的邏輯都放在一起,提高了開發(fā)效率和程序的可讀性。這其實就是函數(shù)式編程思想。函數(shù)式編程在很多的第三方框架中都有明顯的提現(xiàn),比如 AFNetWorking、Masonry 等。
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
? ? ? ? ? ?make.edges.equalTo(superview).with.insets(padding);
}];
2、鏈?zhǔn)秸{(diào)用
外面的 block 就是函數(shù)式編程的一個體現(xiàn),在 block 內(nèi)部并不像常規(guī)的 OC 語言,而是不斷的使用點語法調(diào)用,極大的精簡了代碼量,同時也擁有很好的可讀性,使用方便,這種方式就叫做鏈?zhǔn)秸{(diào)用。
鏈?zhǔn)秸{(diào)用是怎么實現(xiàn)的呢?
* 后面帶括號,說明方法的返回值是一個 block;
* 調(diào)用方法肯定是對象才可以調(diào)用,說明 block 的返回值是一個對象;
* 點語法說明這個方法沒有參數(shù);
結(jié)合以上三點,一個沒有參數(shù) & 有返回值 & 返回值是 block & block 的返回值是方法的調(diào)用者,就可以實現(xiàn)鏈?zhǔn)秸{(diào)用。

調(diào)用方法:
testBtn.YTitle(@"測試", UIControlStateNormal).YTitleColor([UIColor blueColor], UIControlStateNormal).YFrame(CGRectMake(100, 300, 100, 50)).YBackgroundColor([UIColor yellowColor]).YAddToView(self.view);
本文 demo:https://github.com/yuetianlu/UIBaseDSL.git,給常用的系統(tǒng)原生 UI 控件擴展了鏈?zhǔn)秸{(diào)用用法。
參考文章: