nsinteger result = adder.add(4).sub(1).mult(2).div(3);表示(4+1)*2/3,是不是很方便很直觀。
我們知道,如果是c++的實現話鏈式操作是很簡單的,因為c++的函式呼叫就是通過點操作呼叫的,只需要返回物件本身就可以實現鏈結了。但是oc就不行了,因為oc的點操作表示的get或是set,點操作只能用作屬性變數。但在oc中好像我們也見過這樣的呼叫:obc.action();看著不是很直觀,但這樣obc.actionblock();可能就有點眼熟了,對就是block的呼叫!但問題又來了,block是可以實現點操作,那怎麼像這樣obc.actionblock().actionblock()鏈結起來序列呼叫呢?再想想c++的返回物件本身,對block中返回函式本身應該就可以了。試一下:
1、宣告返回值為自身物件、傳入引數為整形的block :
typedef
caculator
*(^iblock) (
nsinteger
inum);
2、宣告計算器物件:
@inte***ce
caculator :
nsobject
@property
(nonatomic
, readonly
) nsinteger
result;
- (iblock
) add;
@end
@implementation
caculator //
caculator.m
- (iblock
) add ;
return
block; }
@end
3、使用方法:
calculator *
caculator
= [[
caculator
alloc
] init];
caculator
.add(10
).add(10
); nslog
(@"result = %ld"
, (long
)caculator
.result
); 是不是實現了鏈式呼叫啊!
///進一步的優化呼叫:
由於add返回的是物件本身,顯然不能這麼使用:nsinteger result = caculator
.add(10
).add(10
);這樣使用會方便些,但如果能這樣的話無疑會更加方便。
怎麼辦呢?這能在封裝一層,轉化一下。
+ (nsinteger
)caculator:(
void
(^)(
caculator
*make)) caculator;
+ (nsinteger
)caculator:(
void
(^)(
caculator
*make)) caculator
使用方法:
nsinteger
result = [
caculator
caculator
:^(caculator
*make) ];
ios鏈式程式設計
首先我們看一下使用masonry對控制項進行布局的 格式。self.bottomview1 mas makeconstraints masconstraintmaker make 上邊這段 有特點 使用點語法 可以進行鏈式呼叫 那麼實現鏈式程式設計就需要解決上邊兩個問題。function.h imp...
iOS中的鏈式程式設計
ios開發過程中鏈式程式設計平時運用的最多的應該就是 masonry的約束,剛開始用masonry時就感覺莫名其妙,只是按照規則用 把一系列設定連線起來,感覺可讀性很好並沒有深入 偶爾看到鏈式程式設計的思想,就是以masonry舉得例子,才認識到這其實是一種讓 可讀性更強,也能提高開發效率的一種思想...
黑魔法 iOS鏈式程式設計
在使用sdautolayout 時就已經發現這種鏈式程式設計。通過 將屬性鏈結在一起形成如同一條鏈的程式設計方法。self.totalmoneycount sd layout.leftequaltoview self rightequaltoview self topspacetoview self...