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的值;

 

函数式响应编程:

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2016-07-12 22:13  潜意识  阅读(167)  评论(0编辑  收藏  举报