模仿masonry写的链式编程的Demo。
任何类都具有计算的功能。
1,首先给N�Sobject 添加个分类:
#import <Foundation/Foundation.h>
#import "CaculatorManager.h"
@interface NSObject (CasulatorMarker)
+(int)zdq_caculator:(void(^)(CaculatorManager * mager))block;
@end
2,方法的实现:
+(int)zdq_caculator:(void (^)(CaculatorManager *))block
{
NSLog(@"mager = %@",block);
//创建计算管理者
CaculatorManager * mag = [CaculatorManager new];
//调用block,进行计算
block(mag);
//返回计算的结果。
return mag.result;
}
3,创建计算管理者,用来管理所有计算:
#import <Foundation/Foundation.h>
@interface CaculatorManager : NSObject
//result:用来保存计算结果。
@property (nonatomic,assign)int result;
//加法
-(CaculatorManager *(^)(int))add;
//减法
-(CaculatorManager *(^)(int))sub;
@end
4,方法的实现:
-(CaculatorManager *(^)(int))add
{
return ^CaculatorManager *(int a){
self.result += a;
NSLog(@"加法 %s",__func__);
return self;
};
}
-(CaculatorManager *(^)(int))sub
{
return ^CaculatorManager * (int a){
self.result -= a;
NSLog(@"减法 %s",__func__);
return self;
};
}
5,方法的调用:
- (void)viewDidLoad {
[super viewDidLoad];
int result = [NSObject zdq_caculator:^(CaculatorManager *mager) {
NSLog(@"mager = %@",mager);
mager.add(3).add(8).sub(4).sub(1);
}];
}
6,链式编程思想:
1,每一个操作都返回block,
2,给所有类提供一个计算方法zdq_caculator
3,创建计算制造者,计算制造者提供了很多方法计算,每个计算方法,方法不需要参数,但是必须返回block,每个block需要传入一个参数,计算什么值。
4,传入block,block用于把所有的计算保存到计算制造者中
5,执行block,.把计算制造者计算的值,返回出去。
7,
这个方法如果一般来写:
mager.add(3).add(8).sub(4).sub(1);
[[[[mager add:3] add:8] sub:4] sub:1];
区别就是定义的把block作为返回值,并且block的返回值是计算管理者,这样才能继续调用下去。