美文网首页
RAC(一)

RAC(一)

作者: dandelionYD | 来源:发表于2018-12-28 19:27 被阅读0次

    本demo详见github

    1.ReactiveCocoa简介

    ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架。
    在iOS开发过程中,经常会响应某些事件来处理某些业务逻辑,例如按钮的点击,上下拉刷新,网络请求,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation)。但是这些事件都用不同的方式来处理,比如action、delegate、KVO、callback等。 这些我们都可以使用RAC来做到。

    2.RAC的思想

    我们先来看看一些编程思想

    • 1.面向过程:处理事情以过程为核心,一步一步的实现(我们所已知的C语言就是面向过程的)
    • 2.面向对象:处理是以对象为点来处理的(OC就是面向对象的)
    • 3.链式编程:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好,如:a(1).b(2).c(3)(masonry里面就包含了链式的思想)
    • 4.响应式编程(Reactive Programming):不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果(KVO底层的实现)
    • 5.函数式编程(Functional Programming):把操作写成一系列嵌套的函数或者方法来调用

    对于RAC:函数响应式编程(FRP) 集成了上述的一些思想

    下面我们来写一个:链式思想的小Demo

    代码如下:
    CaculatorMaker.h
    @interface CaculatorMaker : NSObject
    /**计算结果*/
    @property (nonatomic,assign)int  result;
    
    /**加法*/
    -(CaculatorMaker*(^)(int))add;
    
    /**乘法*/
    -(CaculatorMaker*(^)(int))multiply;
    @end
    
    CaculatorMaker.m
    #import "CaculatorMaker.h"
    
    @implementation CaculatorMaker
    -(CaculatorMaker*(^)(int))add{
        return ^(int num){
            self->_result += num;
            return self;
        };
    }
    
    -(CaculatorMaker*(^)(int))multiply{
        return ^(int num){
            self->_result *= num;
            return self;
        };
    }
    @end
    
    NSObject+Caculator.h
    #import <Foundation/Foundation.h>
    #import "CaculatorMaker.h"
    
    @interface NSObject (Caculator)
    +(int)makeCaculator:(void (^)(CaculatorMaker * maker))block;
    @end
    
    NSObject+Caculator.m
    @implementation NSObject (Caculator)
    + (int)makeCaculator:(void (^)(CaculatorMaker * maker))block{
        // 创建计算制造者
        CaculatorMaker *maker = [[CaculatorMaker alloc] init];
        // 计算
        block(maker);
        return maker.result;
    }
    @end
    
    使用:
        
    int result = [NSObject makeCaculator:^(CaculatorMaker * _Nonnull maker) {
          maker.add(10).add(20).multiply(2);
          maker.multiply(10);
     }];
    
     NSLog(@"%d",result);
    

    具体分析见下哟:


    image

    响应式思想的小Demo (KVO的实现)


    下面我们再来写一个:函数式编程的小Demo

    Caculator.h
    #import <Foundation/Foundation.h>
    @interface Caculator : NSObject
    @property (nonatomic, assign) int result;
    @property (nonatomic, assign) BOOL isEqule;
    - (instancetype)add:(int(^)(int result))block;
    - (instancetype)equle:(BOOL(^)(int result))block;
    @end
    
    Caculator.m
    #import "Caculator.h"
    @implementation Caculator
    - (instancetype)add:(int (^)(int result))block
    {
        _result = block(_result);
        return self;
    }
    - (instancetype)equle:(BOOL (^)(int))block
    {
        _isEqule = block(_result);
        return self;
    }
    @end
    
    使用:
        Caculator *caculator = [[Caculator alloc] init];
        BOOL isEqule = [[[caculator add:^(int result){
            result += 10;
            result += 20;
            return  result;
        }] equle:^BOOL(int result) {
            return result == 30;
        }] isEqule];
        NSLog(@"%d",isEqule);
    

    具体分析见下哟:


    image

    友情链接:

    相关文章

      网友评论

          本文标题:RAC(一)

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