zoukankan      html  css  js  c++  java
  • iOS 链式编程探索(Masonry)

    看了几篇关于链式编程的文章,还是理解的不透彻,我想这可能是因为我自己对block掌握的不熟练。

    我已经明白了,所以,和大家分享一下我的理解!如有问题,麻烦大家指出!

    直接看代码吧!关键的注释都有。

    我自己运行过,可以正常运行!(控制台代码)

    #import <Foundation/Foundation.h>
    
    @class CalculatorMaker;
    
    typedef CalculatorMaker *(^ReturnBlock)(int);
    
    // Class - CalculatorMaker
    @interface CalculatorMaker : NSObject
    
    @property (nonatomic, assign) int result;
    
    - (ReturnBlock)add;
    
    @end
    
    @implementation CalculatorMaker
    
    - (ReturnBlock)add{
        //add被执行,返回一个用于计算的block
        return ^CalculatorMaker *(int x){ //这里的CalculatorMaker *是为了说明问题。日常使用建议用id
            
            self.result += x;
            return self; //返回了一个CalculatorMaker *
        };
    }
    
    @end
    
    // Category - Caculator
    @interface NSObject (Caculator)
    
    + (int)makeCaculators:(void(^)(CalculatorMaker *make))caculatorBlock;
    
    @end
    
    @implementation NSObject (Calculate)
    
    + (int)makeCaculators:(void(^)(CalculatorMaker *make))caculatorBlock{
        
        CalculatorMaker *maker = [[CalculatorMaker alloc]init];
        caculatorBlock(maker);
        return maker.result;
    }
    
    @end
    
    // main
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            int result = [NSObject makeCaculators:^(CalculatorMaker *maker){
                CalculatorMaker *mk = [[CalculatorMaker alloc]init];
                ReturnBlock blc = mk.add;   //blc为add方法执行后返回的block
                mk = blc(1);                //执行block后,block返回了一个CalculatorMaker实例
                maker.result = mk.add(2).add(3).result;
                //因此,可以直接进行链式编程
                //mk.add返回了一个block,block(2)返回了一个实例(加入叫obj),这个实例obj执行add,又返回了一个block
                //block又执行block(3)后又返回了一个实例
            }];
            NSLog(@"
    result = %d",result);
            
        }
        return 0;
    }

    原创文章,转载请注明出处!谢谢合作!

    比较有价值的参考资料:http://www.jianshu.com/p/540711c1a507

  • 相关阅读:
    jquery操作删除元素
    js添加页面元素
    jQuery方法
    form表单的几种提交方式
    Comparable和Comparator
    快速失败和安全失败
    Junit 测试基础
    Spring 之AOP 面向切面编程
    spring 的核心接口
    Nginx
  • 原文地址:https://www.cnblogs.com/ficow/p/5624091.html
Copyright © 2011-2022 走看看