链式编程
2017-05-03 本文已影响34人
西门丨不吹雪
最近有时间看了下Masonry的实现原理,大家都知道Masonry就是经典的链式编程思想
void(^block)(MASConstraintMaker *maker) = ^(MASConstraintMaker *make) {
// 描述控件的所有约束
make.left.top.equalTo(@10);
make.right.bottom.equalTo(@(-10));
};
// 参数:block
[redView mas_makeConstraints:block];
mas_makeConstraints作用:给控件设置布局,把控件的所有约束保存到约束制造者中 ---- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block
1.创建一个约束制造者
2.调用block(maker),把所有的控件的约束全部保存到约束制造者
3.[constraintMaker install]:遍历约束制造者的所有约束给控件添加约束
链式编程小练习
1.创建XMCaculatorMaker文件,计算器maker类
2.定义计算结果属性
3.定义加法运算方法
#import <Foundation/Foundation.h>
@interface XMCaculatorMaker : NSObject
@property (nonatomic, assign)int result;
-(XMCaculatorMaker *(^)(int num))add;
@end
#import "XMCaculatorMaker.h"
@implementation XMCaculatorMaker
-(XMCaculatorMaker *(^)(int num))add
{
return ^(int num){
_result = _result + num;
return self;
};
}
创建NSObject分类,所有它的子类都可调用
#import <Foundation/Foundation.h>
#import "XMCaculatorMaker.h"
@interface NSObject (XMCaculaterMaker)
以后计算都使用这个方法,一调用这个方法就返回结果
-(int)makeCaculater:(void(^)(XMCaculatorMaker *maker))block;
@end
#import "NSObject+XMCaculaterMaker.h"
@implementation NSObject (XMCaculaterMaker)
-(int)makeCaculater:(void (^)(XMCaculatorMaker *maker))block
{
创建制造者
XMCaculatorMaker *maker = [[XMCaculatorMaker alloc] init];
NSLog(@"%@",maker);
block(maker);
return maker.result;
}
调用,进行计算
NSObject *object = [[NSObject alloc]init];
block:使代码高聚合
[object makeCaculater:^(XMCaculatorMaker *maker) {
把所有的计算代码封装到这里
NSLog(@"-----%@",maker);
maker.add(10).add(20);
}];
总结
-
之前开发中比较习惯,把事情封装到一个方法中
-
链式编程思想:把要做的事情封装到block,给外界提供一个返回这个Block的方法
-
链式编程思想方法特点:
1.方法返回值必须是block
2.block参数:放需要操作的内容
3.block返回值:方法调用者