iOS鏈式程式設計

2021-07-16 13:26:51 字數 1622 閱讀 2838

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...