iOS-鏈式程式設計思想

weixin_33976072發表於2017-08-17

在iOS中,鏈式程式設計雖然用的不太多,但是,在特定的應用環境下,利用block實現鏈式程式設計的話,會大大的提高程式設計效率,並且程式碼直觀易讀。

iOS中鏈式程式設計中最經典的例子是Masonry為代表的程式碼形式,程式碼如下:

make.top.left.equalTo(@20);

我們知道OC的點語法實際上就是呼叫getter/setter方法,能實現這種鏈式最根本的原因是每次使用呼叫getter方法的時候的返回值實際上就是物件本身,這樣我們就能一直使用該物件一直使用點語法去呼叫。

Swift和OC的寫法是有區別:

Swift是直接返回物件本身,如:

func name(_ name: String) -> Person {}

OC 是返回一個 返回值為物件本身的 Block,如:

- (Person * (^)(NSString *))name;

造成這種差別的原因是:

1.Swift中的點語法是可以直接用來使用方法的。

2.OC中的點語法實際就是一個 getter/setter 方法,使用點語法,那麼相當於使用 getter/setter 方法獲取屬性,因此採用和Swift類似的方法的話,只能用 [ ] 來呼叫,那麼他的鏈式就表現為

[[[person name(@"Lily")] sex(@"men")] age(19)];

缺乏美感,也不簡潔。但是返回帶引數,返回值為物件本身的 Block 的話,則可以表現為是一個 getter 方法,get一個 Block,然後在Block中傳遞引數。

例子:

Swift 鏈式程式設計

Swift中的實現鏈式程式設計比Objective-C中簡單很多,通過func和extension即可實現。

1487527-b39338df9ac07d79.png
擴充套件UIView:

呼叫方法:

1487527-dee02abcf9b1eade.png
測試程式碼

Objective-C 鏈式程式設計

Objective-C中實現鏈式程式設計主要是通過Block來實現,利用方法的點式呼叫,自定義LWJView,定義如下:

1487527-0bad614000e9e5e7.png
LWJView.h

實現如下:

1487527-e054bac77feafeb6.png
LWJView.m

呼叫方法:

1487527-0afa46b82a314993.png
測試程式碼

執行的結果都是:

1487527-250463e507955d56.png
執行結果圖

相關文章