之前看到 Masonry 是使用链式编程,感觉很酷,自己简单的写了一个链式编程的示例!
首先简单的来说一下链式编程思想。
链式编程思想:把想要的操作封装到block,然后给外界提供一个返回这个Block的方法。
链式编程思想的特点:方法返回值必须是block,block参数里:放需要操作的内容,block返回值是:方法调用者。
1.首先我创建了一个类 :(BYJCaculatorMaker)
#import <Foundation/Foundation.h>
@class BYJCaculatorMaker;
typedef BYJCaculatorMaker *(^caculatorBlock)(int num);
@interface BYJCaculatorMaker : NSObject
@property (nonatomic, assign) int result;
#pragma mark - 加法
- (caculatorBlock)add;
#pragma mark - 减法
- (caculatorBlock)subtract;
#pragma mark - 乘法
- (caculatorBlock)multiply;
#pragma mark - 除法
- (caculatorBlock)divide;
@end
#import "BYJCaculatorMaker.h"
@implementation BYJCaculatorMaker
#pragma mark - 加法
- (caculatorBlock)add {
return ^(int num){
_result += num;
return self;
};
}
#pragma mark - 减法
- (caculatorBlock)subtract {
return ^(int num) {
_result -= num;
return self;
};
}
#pragma mark - 乘法
- (caculatorBlock)multiply {
return ^(int num){
_result *= num;
return self;
};
}
#pragma mark - 除法
- (caculatorBlock)divide {
return ^(int num) {
_result /= num;
return self;
};
}
@end
2.我创建了一个分类:(NSObject+Caculator), 创建分类也是为了让自己的代码高聚合。只要是NSObject类都可以调用我的方法。
#import <Foundation/Foundation.h>
#import "BYJCaculatorMaker.h"
typedef void(^makerBlock)(BYJCaculatorMaker *maker);
@interface NSObject (Caculator)
// 以后计算都使用这个方法,一调用这个方法就返回结果.
+ (int)makeCaculator:(makerBlock)block;
@end
#import "NSObject+Caculator.h"
@implementation NSObject (Caculator)
+ (int)makeCaculator:(makerBlock)block {
// 创建计算
BYJCaculatorMaker *maker = [[BYJCaculatorMaker alloc] init];
// 计算
block(maker);
return maker.result;
}
@end
// 只需在block内调用,即可获取结果
int result = [NSString makeCaculator:^(BYJCaculatorMaker *maker) {
maker.add(10).multiply(10).subtract(50).divide(5);
}];
NSLog(@"%d", result);
// 高聚合性
[NSString makeCaculator:^(BYJCaculatorMaker *maker) {
maker.subtract(100).divide(5).add(10).multiply(9);
}];
[UIView makeCaculator:^(BYJCaculatorMaker *maker) {
maker.subtract(100).divide(5).add(10).multiply(9);
}];