@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
這里要實(shí)現(xiàn)的是類似于 caculateMarker.add(num).add(num2).add(num3)...的運(yùn)算調(diào)用按灶。
鏈?zhǔn)骄幊汤昧薵et方法或者說懶加載帅韧,不過這次我們懶加載的是block
下面是寫的兩個(gè)block蓬豁,一個(gè)plus一個(gè)是add 沒錯(cuò)窜管,其實(shí)他們實(shí)現(xiàn)的都是加法運(yùn)算,而下面的寫法更簡潔清晰。
@property(nonatomic,copy)CaculateMarker*(^plus)(NSInteger num);
- (CaculateMarker* (^)(NSInteger num))add;
分析下:
caculateMarker.add(num).
1.caculateMarker.add ? 這里就是懶加載來獲取add or plus這個(gè)block,然后我們?cè)谝韵碌?m中實(shí)現(xiàn)get方法,返回一個(gè)block,這個(gè)block包含了加法運(yùn)算邏輯沮焕,然后把這個(gè)block返回。
- (CaculateMarker*(^)(NSInteger num))plus{
? ? ? return^(NSInteger num){
? ? ? ? ? ? self.count+=num;
? ? ? ? ? ? return self;
? ? ? };
}
那么caculateMarker.add(num). 實(shí)際上是 addBlock = ^(NSInteger num){...};
替換下就是addBlock(num),這樣我們的鏈?zhǔn)交揪屯瓿闪死冢@樣拆解開的話應(yīng)該蠻好理解的了峦树。