zoukankan      html  css  js  c++  java
  • ReactiveCocoa(RAC)

    好处:代码高聚合,方便我们管理;

    链式编程:

    CaculatorMaker.h

    #import <Foundation/Foundation.h>
    #define ADD
    #define KVO
    @interface CaculatorMaker : NSObject
    @property (nonatomic, assign) KVO int result;
    // +
    - (instancetype)add:(int)num; ADD
    - (CaculatorMaker *(^)(int num))add;
    // -
    // *
    - (CaculatorMaker *(^)(int num))multy;
    // /
    @end

    CaculatorMaker.m

    #import "CaculatorMaker.h"
    @implementation CaculatorMaker
    //- (instancetype)add:(int)num
    //{
    //    _result += num;
    //    return self;
    //}
    - (CaculatorMaker *(^)(int))multy
    {
        return ^(int num){
            _result *= num;
            return self;
        };
    }
    - (CaculatorMaker * (^)(int num))add
    {
        return ^(int num){
            _result += num;
            return self;
        };
    }
    @end

    NSObject+Caculator.h

    #import <Foundation/Foundation.h>
    #import "CaculatorMaker.h"
    @interface NSObject (Caculator)
    // 以后计算都使用这个方法,一调用这个方法就返回结果.
    + (int)makeCaculator:(void(^)(CaculatorMaker *))block;
    @end

    NSObject+Caculator.m

    #import "NSObject+Caculator.h"
    #import "CaculatorMaker.h"
    @implementation NSObject (Caculator)
    + (int)makeCaculator:(void (^)(CaculatorMaker *))block
    {
        // 创建计算制造者
        CaculatorMaker *maker = [[CaculatorMaker alloc] init];
        // 计算
        block(maker);
        return maker.result;
    }
    @end
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        // add(1).add(2)
        // 1.创建计算制造者
        CaculatorMaker *maker = [[CaculatorMaker alloc] init];
        // 10 + 20 + 30 + 40
        // 链式编程思想: maker.add(10).add(20).add(30).add(40)
    //   int result = [maker.add(10).add(20).add(30).add(40) result];
        // 提供一个没参数的add方法,返回值block
    //   int reslut = [[[[[maker add:10] add:20] add:30] add:40] result];
        // block:使代码高聚合
        int result = [NSObject makeCaculator:^(CaculatorMaker *maker) {
            // 把所有的计算代码封装到这里
            maker.add(10).add(20);
            maker.add(30).add(40);
            maker.multy(3);
        }];
        NSLog(@"%d",result);
    }

    // 之前开发中比较习惯,把事情封装到一个方法中,

    // 链式编程思想:把要做的事情封装到block,给外界提供一个返回这个Block的方法

    // 链式编程思想方法特点:方法返回值必须是block,block参数:放需要操作的内容,block返回值:方法调用者

     

     响应式编程:(类似kvo)

    c=a+b;  a或者b改变  直接影响c的值;

     

    函数式响应编程:

    把一个操作写成一系列的方法;

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    AS快捷键的设置
    hausaufgabe--python 23- Recurse 2
    hausaufgabe--python 22- Recurse
    hausaufgabe--python 21_ Lambda
    hausaufgabe--python 20-Closure functions 2
    hausaufgabe--python 20- usage of Closure
    hausaufgabe--python 19- Functions 2
    hausaufgabe--python 18- Defined specific Functions
    hausaufgabe--python 17- Function definition
    hausaufgabe--python 16- Sequenz
  • 原文地址:https://www.cnblogs.com/jingdizhiwa/p/5665097.html
Copyright © 2011-2022 走看看