在iOS中筝尾,鏈?zhǔn)骄幊屉m然用的不太多捡需,但是,在特定的應(yīng)用環(huán)境下筹淫,利用block實(shí)現(xiàn)鏈?zhǔn)骄幊痰脑捳净裕瑫?huì)大大的提高編程效率,并且代碼直觀易讀贸街。
iOS中鏈?zhǔn)骄幊讨凶罱?jīng)典的例子是Masonry為代表的代碼形式庵寞,代碼如下:
make.top.left.equalTo(@20);
我們知道OC的點(diǎn)語(yǔ)法實(shí)際上就是調(diào)用getter/setter方法,能實(shí)現(xiàn)這種鏈?zhǔn)阶罡镜脑蚴敲看问褂谜{(diào)用getter方法的時(shí)候的返回值實(shí)際上就是對(duì)象本身薛匪,這樣我們就能一直使用該對(duì)象一直使用點(diǎn)語(yǔ)法去調(diào)用捐川。
Swift和OC的寫(xiě)法是有區(qū)別:
Swift是直接返回對(duì)象本身,如:
func name(_ name: String) -> Person {}
OC 是返回一個(gè) 返回值為對(duì)象本身的 Block逸尖,如:
- (Person * (^)(NSString *))name;
造成這種差別的原因是:
1.Swift中的點(diǎn)語(yǔ)法是可以直接用來(lái)使用方法的古沥。
2.OC中的點(diǎn)語(yǔ)法實(shí)際就是一個(gè) getter/setter 方法,使用點(diǎn)語(yǔ)法娇跟,那么相當(dāng)于使用 getter/setter 方法獲取屬性岩齿,因此采用和Swift類似的方法的話,只能用 [ ] 來(lái)調(diào)用苞俘,那么他的鏈?zhǔn)骄捅憩F(xiàn)為
[[[person name(@"Lily")] sex(@"men")] age(19)];
缺乏美感盹沈,也不簡(jiǎn)潔。但是返回帶參數(shù)吃谣,返回值為對(duì)象本身的 Block 的話乞封,則可以表現(xiàn)為是一個(gè) getter 方法做裙,get一個(gè) Block,然后在Block中傳遞參數(shù)肃晚。
例子:
Swift 鏈?zhǔn)骄幊?br>
Swift中的實(shí)現(xiàn)鏈?zhǔn)骄幊瘫萇bjective-C中簡(jiǎn)單很多锚贱,通過(guò)func和extension即可實(shí)現(xiàn)。
調(diào)用方法:
Objective-C 鏈?zhǔn)骄幊?br>
Objective-C中實(shí)現(xiàn)鏈?zhǔn)骄幊讨饕峭ㄟ^(guò)Block來(lái)實(shí)現(xiàn)关串,利用方法的點(diǎn)式調(diào)用,自定義LWJView拧廊,定義如下:
實(shí)現(xiàn)如下:
調(diào)用方法:
運(yùn)行的結(jié)果都是: