美文网首页
链式编程思想

链式编程思想

作者: 952625a28d0d | 来源:发表于2016-06-16 17:58 被阅读55次
    • 写一个计算的类,用Block实现,并返回Block
    #import <Foundation/Foundation.h>
    
    @interface CaculatorMaker : NSObject
    
    @property (nonatomic, assign) int result;
    
    // 加减乘除 Block实现
    - (CaculatorMaker *(^)(int))add;
    - (CaculatorMaker *(^)(int))sub;
    - (CaculatorMaker *(^)(int))muilt;
    - (CaculatorMaker *(^)(int))divide;
    
    @end```
    
    

    import "CaculatorMaker.h"

    @implementation CaculatorMaker

    • (CaculatorMaker *(^)(int))add
      {
      return ^CaculatorMaker *(int value){

        self.result += value;
        
        return self;
      

      };
      }

    • (CaculatorMaker *(^)(int))muilt
      {
      return ^CaculatorMaker *(int value){

        self.result *= value;
        
        return self;
      

      };
      }

    • (CaculatorMaker *(^)(int))sub
      {
      return ^CaculatorMaker *(int value){

        self.result -= value;
        
        return self;
      

      };
      }

    • (CaculatorMaker *(^)(int))divide
      {
      return ^CaculatorMaker *(int value){

        self.result /= value;
        
        return self;
      

      };
      }

    @end```

    • 给NSObject(所有的类)添加一个计算方法 实现仍是创建计算对象maker,调用Block把值传递出去,用maker接收之后,可继续调用,形成无限传递,并无限使用。
    #import <Foundation/Foundation.h>
    
    @class CaculatorMaker;
    @interface NSObject (Caculator)
    
    // 计算
    + (int)makeCaculators:(void(^)(CaculatorMaker *make))caculatorMaker;
    
    @end```
    
    

    import "NSObject+Caculator.h"

    import "CaculatorMaker.h"

    @implementation NSObject (Caculator)

    • (int)makeCaculators:(void (^)(CaculatorMaker *))caculatorMaker
      {
      CaculatorMaker *maker = [[CaculatorMaker alloc] init];

      caculatorMaker(maker);

      return maker.result;
      }
      @end```

    #import "ViewController.h"
    
    //define this constant if you want to use Masonry without the 'mas_' prefix
    #define MAS_SHORTHAND
    
    //define this constant if you want to enable auto-boxing for default syntax
    #define MAS_SHORTHAND_GLOBALS
    
    #import "Masonry.h"
    
    #import "NSObject+Caculator.h"
    #import "CaculatorMaker.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        UIView *redView = [[UIView alloc] init];
        
        redView.backgroundColor = [UIColor redColor];
        
        [self.view addSubview:redView];
        
        // 设置布局
        [redView makeConstraints:^(MASConstraintMaker *make) {
    
            make.top.left.equalTo(10);
    
            
            make.right.equalTo(-10);
            
        }];
        
    
        // Masonry实现原理
        // 1.给所有UIView提供一个设置约束的方法makeConstraints
        // 2.makeConstraints方法实现:
        // 2.1 创建约束制造者,约束制造者提供了很多设置约束的方法,每个制造约束(equalTo)的方法,方法不需要参数,但是必须返回block,每个block需要传入一个参数,计算什么值。
    
        // 2.2 把约束制造者传入block中,block用于把所有的约束保存到约束制造者中。
        // 3.执行block,
        // 4.利用约束制造者给view一次性添加所有约束。
        
        // 模仿masonry,设计计算器。
        // 链式编程思想,每一个操作都返回block
        // 1.给所有类提供一个计算方法makeCaculator,
        // 2.创建计算制造者,计算制造者提供了很多方法计算,每个计算方法,方法不需要参数,但是必须返回block,每个block需要传入一个参数,计算什么值。
        // 3.传入block,block用于把所有的计算保存到计算制造者中
        // 4.执行blcok
        // 5.把计算制造者计算的值,返回出去。
        
    
        // (1 + 2 + 3 + 4) / 5
        
        int result = [NSObject makeCaculators:^(CaculatorMaker *make) {
           
            make.add(1).add(2).add(3).add(4).divide(5);
        }];
        
        NSLog(@"%d",result);
        
    }
    
    @end```

    相关文章

      网友评论

          本文标题:链式编程思想

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