iOS链式编程思想初窥

题记:iOS的开发语言之一--Objective-C,是一门动态语言,它使用了一种动态的消息发送机制,即对象(object)或类(class)调用方法。而OC中的点语法则只能通过setter和getter方法作用于类的属性,而不能作用于某个方法。链式编程思想则很好的解决了这个问题。
链式编程思想:核心思想为将block作为方法的返回值,且返回值的类型为调用者本身,并将该方法以setter的形式返回,这样就可以实现了连续调用,即为链式编程。

使用链式编程思想比较出色的一个第三方为Masonry,整个约束都围绕着MASConstraintMaker这个对象进行,例如:

    UIView *aView = [[UIView alloc] init];
    aView.backgroundColor = [UIColor redColor];
    [self.view addSubview:aView];
    [aView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.mas_equalTo(300);
        make.center.equalTo(self.view);
    }];

上例简单的使用了Masonry对aView添加了约束,其中mas_equalTo和equalTo方法就是将block作为getter方法的返回值,且返回的值为该对象的调用者,这样就可以一直使用点语法了。

简单使用链式编程思想实现一个简单计算器的功能:
1、新建一个名为CaculateMaker的类,用于运算:
2、在.h文件中声明一个方法add:


h文件.png

3.在.m文件中实现这个方法:


m文件.png

4.在viewController里面导入CaculateMaker.h文件,然后调用add方法就完成了链式语法:
    CaculateMaker *maker = [[CaculateMaker alloc] init];
    maker.add(20).add(30);

通过上面Masonry对aView进行布局可以看出,他为UIView写了一个类目,拓展了mas_makeConstraints方法,并将MASConstraintMaker对象作为block的参数传递,在block的实现里完成aView的布局,提现了函数式编程思想。同样,我们也可以给NSObject添加一个category,完成加法操作:


h文件.png
m文件.png

最后在viewController里面调用,就很轻松的实现了链式语法:

    CGFloat result = [NSObject caculate:^(CaculateMaker *maker) {
        maker.add(10).add(20).add(30);
    }];
    NSLog(@"结果为:%.2f",result);

推荐阅读更多精彩内容