前言:Masonry这个做约束的第三方框架,想必是大家都用过,一连串的约束在一句话完成,显得十分简洁优美,所以我来使用Masonry的链式编程写思想写一个计算管理类。
链式编程写思想的核心是:写一个用返回类型是本类的block作为返回类型的方法。
读起来有点绕口,下面直接上代码。
Masonry是让所有UIVIEW都能创建约束,所以写了一个UIVIEW的分类,那么我想让所有对象都能计算,所以创建一个NSObject的分类NSObject+Calculate
#import <Foundation/Foundation.h>
@interface NSObject (Calculate)
- (NSInteger)wd_makeCalculate:(void (^)(CalculateManager *))calculateManager;
@end
@implementation NSObject (Calculate)
- (NSInteger)wd_makeCalculate:(void (^)(CalculateManager *))block {
CalculateManager *calculateManager = [[CalculateManager alloc] init];
block(calculateManager);
return calculateManager.result;
}
@end
在分类中的我们使用了计算管理类CalculateManager
#import <Foundation/Foundation.h>
@interface CalculateManager : NSObject
@property (nonatomic,assign) NSInteger result;
- (CalculateManager *(^)(int num))add;
- (CalculateManager *(^)(int num))sub;
- (CalculateManager *(^)(int num))multiple;
- (CalculateManager *(^)(int num))divide;
@end
@implementation CalculateManager
- (CalculateManager *(^)(int num))add {
return ^(int num){
_result += num;
return self;
};
}
- (CalculateManager *(^)(int num))sub {
return ^(int num){
_result -= num;
return self;
};
}
- (CalculateManager *(^)(int num))multiple {
return ^(int num){
_result *= num;
return self;
};
}
- (CalculateManager *(^)(int num))divide {
return ^(int num){
_result /= num;
return self;
};
}
@end
下面我们就能用他来做计算了
NSInteger result = [NSObject wd_makeCalculate:^(CalculateManager *calculateManager){
calculateManager.add(3).add(3).sub(2).multiple(3).divide(4);
}];
NSLog(@"%zd",result);