链式编程

最近有时间看了下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 

@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 
#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返回值:方法调用者

你可能感兴趣的:(链式编程)