在iOS中,鏈式編程雖然用的不太多,但是,在特定的應(yīng)用環(huán)境下,利用block實現(xiàn)鏈式編程的話,會大大的提高編程效率,并且代碼直觀易讀。
iOS中鏈式編程中最經(jīng)典的例子是Masonry為代表的代碼形式,代碼如下:
make.top.left.equalTo(@20);
我們知道OC的點語法實際上就是調(diào)用getter/setter方法,能實現(xiàn)這種鏈式最根本的原因是每次使用調(diào)用getter方法的時候的返回值實際上就是對象本身,這樣我們就能一直使用該對象一直使用點語法去調(diào)用。
Swift和OC的寫法是有區(qū)別:
Swift是直接返回對象本身,如:
func name(_ name: String) -> Person {}
OC 是返回一個 返回值為對象本身的 Block,如:
- (Person * (^)(NSString *))name;
造成這種差別的原因是:
1.Swift中的點語法是可以直接用來使用方法的。
2.OC中的點語法實際就是一個 getter/setter 方法,使用點語法,那么相當于使用 getter/setter 方法獲取屬性,因此采用和Swift類似的方法的話,只能用 [ ] 來調(diào)用,那么他的鏈式就表現(xiàn)為
[[[person name(@"Lily")] sex(@"men")] age(19)];
缺乏美感,也不簡潔。但是返回帶參數(shù),返回值為對象本身的 Block 的話,則可以表現(xiàn)為是一個 getter 方法,get一個 Block,然后在Block中傳遞參數(shù)。
例子:
Swift 鏈式編程
Swift中的實現(xiàn)鏈式編程比Objective-C中簡單很多,通過func和extension即可實現(xiàn)。
調(diào)用方法:
Objective-C 鏈式編程
Objective-C中實現(xiàn)鏈式編程主要是通過Block來實現(xiàn),利用方法的點式調(diào)用,自定義LWJView,定義如下:
實現(xiàn)如下:
調(diào)用方法:
運行的結(jié)果都是: