@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
这里要实现的是类似于 caculateMarker.add(num).add(num2).add(num3)...的运算调用。
链式编程利用了get方法或者说懒加载,不过这次我们懒加载的是block
下面是写的两个block,一个plus一个是add 没错,其实他们实现的都是加法运算,而下面的写法更简洁清晰。
@property(nonatomic,copy)CaculateMarker*(^plus)(NSInteger num);
- (CaculateMarker* (^)(NSInteger num))add;
分析下:
caculateMarker.add(num).
1.caculateMarker.add 这里就是懒加载来获取add or plus这个block,然后我们在以下的.m中实现get方法,返回一个block,这个block包含了加法运算逻辑,然后把这个block返回。
- (CaculateMarker*(^)(NSInteger num))plus{
return^(NSInteger num){
self.count+=num;
return self;
};
}
那么caculateMarker.add(num). 实际上是 addBlock = ^(NSInteger num){...};
替换下就是addBlock(num),这样我们的链式基本就完成了,这样拆解开的话应该蛮好理解的了。