链式编程初探

作者: 大慈大悲大熊猫 | 来源:发表于2015-09-29 14:18 被阅读1263次

    前言

    最近用了下masonry,看到许多如

    make.top.equalTo(self.mas_topLayoutGuide); 
    make.left.equalTo(self.view);
    make.right.equalTo(self.view);
    make.height.equalTo(@40);
    

    这样的代码,又通过几篇博客了解到这就是简单地链式编程,所以准备了解一下,并且在学习masonry框架前,也可以学习它的编程思想。

    链式编程思想

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

    链式编程特点

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

    实战

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

    1.新建类。


    屏幕快照 2015-09-29 下午2.06.44.png

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

    @interface CaculatorMaker : NSObject
    
    @property (nonatomic, assign) int result;
    
    - (CaculatorMaker *(^)(int))add;
    - (CaculatorMaker *(^)(int))sub;
    - (CaculatorMaker *(^)(int))multi;
    - (CaculatorMaker *(^)(int))divide;
    
    @end
    

    3.在CaculatorMaker.m里实现

    - (CaculatorMaker *(^)(int))add
    {
        return ^id(int x) {
            self.result += x;
            return self;
        };
    }
    

    4.定义运算方法

    @class CaculatorMaker;
    @interface NSObject (Caculator)
    
    + (int)makeCaculators:(void(^)(CaculatorMaker *maker))caculatorMaker;
    
    @end
    

    5.实现

    + (int)makeCaculators:(void(^)(CaculatorMaker *maker))caculatorMaker
    {
        CaculatorMaker *maker = [[CaculatorMaker alloc]init];
        caculatorMaker(maker);
        return maker.result;
    }
    

    6.最后就能随意调用了

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

    后记

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

    相关文章

      网友评论

      • iOS_SXH:Block的返回对象为什么要是“CaculatorMaker *”这个啊,不返回或者其他的可以么?
      • 9a8c62edad02:第五步实现的这个:
        caculatorMaker(maker);
        这一句不是很明白,博主能帮忙解答下?
        熊猫啃竹凳:caculatorMaker这个是个block名
        大慈大悲大熊猫:调用第六步里的 block
      • yehot:请教一下:为什么返回值是 block的函数,可以直接用点语法调用?? —— maker.add(1).add(1);这种??
        OC的函数不是只能用中括号调用么? ——【object foo】
        一直没想明白…………
        我的大名叫小爱:@正趣果上果 这种写法也是借鉴学习了 jQuery 的写法 .非常强大...
        huqigu:@yehot 没有参数的方法可以都可以使用点语法来调用的

      本文标题:链式编程初探

      本文链接:https://www.haomeiwen.com/subject/tjgwcttx.html