iOS 开发之使用链式编程思想实现简单的计算器

  链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。例如 a(1).b(2).c(3)。

  链式编程思想最为关键的是,方法的返回值是block,block必须返回对象本身(返回block时,block所在的方法调用者对象)block的参数是需要操作的值。;

  在iOS开发中,使用链式编程思想最好的代表是 Masonry 自动约束布局:

  例如:

[itemButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(contentView.mas_left).offset( + (itemWidth+)*i);
make.top.equalTo(contentView.mas_top).offset();
make.width.height.equalTo(@(itemWidth));
}];

  执行流程为:

/**
mas_makeConstraints执行流程:
1.创建约束制造者MASConstraintMaker,并且绑定控件,生成一个保存所有约束的数组
2.执行mas_makeConstraints传入的Block
3.让约束制造者安装约束!
* 1.清空之前的所有约束
* 2.遍历约束数组,一个一个安装
*/

  可以看出,使用链式编程,代码可读性较好。

  仿照 Masnory 使用链式编程思想写个运算器:

#import <Foundation/Foundation.h>

@interface CalculateManager : NSObject

@property (nonatomic, assign) int result;

- (CalculateManager *(^)(int value))add;

- (CalculateManager *(^)(int value))minus;

- (CalculateManager *(^)(int value))multiply;

- (CalculateManager *(^)(int value))devite;

@end

  

#import "CalculateManager.h"

@implementation CalculateManager

- (CalculateManager *(^)(int))add {
return ^(int value) {
_result += value;
return self;
};
} - (CalculateManager *(^)(int))minus {
return ^(int value) {
_result -= value;
return self;
};
} - (CalculateManager *(^)(int))multiply {
return ^(int value) {
_result *= value;
return self;
};
} - (CalculateManager *(^)(int))devite {
return ^(int value) {
_result /= value;
return self;
};
} @end

  

#import "NSObject+Calculate.h"

#import "CalculateManager.h"

@implementation NSObject (Calculate)

+ (int)ztb_calculateValue:(void(^)(CalculateManager *make))block
{
CalculateManager *manager = [[CalculateManager alloc] init];
block(manager);
return manager.result;
} @end

  在使用时:

int result = [NSString ztb_calculateValue:^(CalculateManager *make) {
make.add().multiply().devite().minus().add();
}];

  可以在 Block 中进行运算了

上一篇:mac修改默认打开方式


下一篇:React中jquery引用