前言

最近学习了下masonry的源码,看到有许多如

1
2
3
4
make.top.equalTo(self.mas_topLayoutGuide); 
make.left.equalTo(self.view);
make.right.equalTo(self.view);
make.height.equalTo(@40);

这样的代码,对这种链式的写法很感兴趣,所以准备研究一下,学习它的编程思想。

链式编程思想

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

链式编程特点

方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)

实战

模仿masonry,写一个加法计算器,练习链式编程。

1.新建类。

a.png

2.在CaculatorMaker.h里定义四则运算

1
2
3
4
5
6
7
8
9
10
@interface CaculatorMaker : NSObject

@property (nonatomic, assign) int result;

- (CaculatorMaker *(^)(int))add;
- (CaculatorMaker *(^)(int))sub;
- (CaculatorMaker *(^)(int))multi;
- (CaculatorMaker *(^)(int))divide;

@end

3.在CaculatorMaker.m里实现

1
2
3
4
5
6
7
- (CaculatorMaker *(^)(int))add
{
    return ^id(int x) {
        self.result += x;
        return self;
    };
}

4.定义运算方法

1
2
3
4
5
6
@class CaculatorMaker;
@interface NSObject (Caculator)

+ (int)makeCaculators:(void(^)(CaculatorMaker *maker))caculatorMaker;

@end

5.实现

1
2
3
4
5
6
+ (int)makeCaculators:(void(^)(CaculatorMaker *maker))caculatorMaker
{
    CaculatorMaker *maker = [[CaculatorMaker alloc]init];
    caculatorMaker(maker);
    return maker.result;
}

6.最后就能随意调用了

1
2
3
int result = [NSObject makeCaculators:^(CaculatorMaker *maker) {
        maker.add(1).add(1).add(3).multi(3).sub(5).divide(2);
    }];

后记

非常简单的代码,初步的接触了下链式编程,感觉这种编程方式很爽,分享给大家。