iOS block=鏈?zhǔn)骄幊痰暮唵螌崿F(xiàn) 幫助理解篇

@interface CaculateMarker :NSObject

@property(nonatomic,assign) NSInteger count;

@property(nonatomic,copy) CaculateMarker*(^plus)(NSInteger num);

- (CaculateMarker* (^)(NSInteger num))add;

@end


@implementation CaculateMarker

- (CaculateMarker*(^)(NSInteger num))add{

? ? ? return^(NSInteger num){

? ? ? ? ? ? self.count+=num; ?

? ? ? ? ? ? return self;

? ? ? };

}

- (CaculateMarker*(^)(NSInteger num))plus{

? ? ? return^(NSInteger num){

? ? ? ? ? ? self.count+=num;

? ? ? ? ? ? return self;

? ? ? };

}

@end

這里要實現(xiàn)的是類似于 caculateMarker.add(num).add(num2).add(num3)...的運算調(diào)用。

鏈?zhǔn)骄幊汤昧薵et方法或者說懶加載,不過這次我們懶加載的是block

下面是寫的兩個block,一個plus一個是add 沒錯,其實他們實現(xiàn)的都是加法運算,而下面的寫法更簡潔清晰。

@property(nonatomic,copy)CaculateMarker*(^plus)(NSInteger num);

- (CaculateMarker* (^)(NSInteger num))add;

分析下:

caculateMarker.add(num).

1.caculateMarker.add ? 這里就是懶加載來獲取add or plus這個block,然后我們在以下的.m中實現(xiàn)get方法,返回一個block,這個block包含了加法運算邏輯,然后把這個block返回。

- (CaculateMarker*(^)(NSInteger num))plus{

? ? ? return^(NSInteger num){

? ? ? ? ? ? self.count+=num;

? ? ? ? ? ? return self;

? ? ? };

}

那么caculateMarker.add(num). 實際上是 addBlock = ^(NSInteger num){...};

替換下就是addBlock(num),這樣我們的鏈?zhǔn)交揪屯瓿闪耍@樣拆解開的話應(yīng)該蠻好理解的了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容