链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。例如 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(15 + (itemWidth+15)*i); make.top.equalTo(contentView.mas_top).offset(255); 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(19).multiply(10).devite(5).minus(5).add(8); }];
可以在 Block 中进行运算了