链式编程

最近有时间看了下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返回值:方法调用者

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容