ReactiveCocoa 函数响应式编程简介 链式编程 函数式编程 响应式编程

金瑞
2023-12-01

最近,RAC的名气可谓是越来越大,出于对技术的探索心(为了装逼),最近研究学习了一下RAC,以下是本人在学习中对其的一些粗浅的认识;

首先,什么是RAC,ReactiveCocoa时Github上的一个Cocoa FRP框架,目的为了接管苹果的所有事件机制(addTarget,代理,通知,KVO,时钟,网络处理);从其强大的作用就可以看出,这是一个超重量级大框架,慎用!

RAC运用的是函数响应式编程思想,那么什么是函数响应式编程思想,下面我们就从头说起:

说到编程思想,我们熟悉的就是面向过程编程思想和面向对象编程思想,面向过程 即根据问题,一步一实现,极其不利于代码的阅读和维护;面向对象 是对代码的抽象处理,即万物皆对象,由不同的对象,调用起自身的方法,实现相应的功能

下面来创建一个dog对象来具体分析下:


dog的.h文件

#import <Foundation/Foundation.h>


@interface Dog : NSObject


- (void)run;

- (void)eat;


dog的.m文件

#import "Dog.h"


@implementation Dog


- (void)run {

    NSLog(@"%s"__FUNCTION__);

}


- (void)eat {

    NSLog(@"%s"__FUNCTION__);

}

以下是在控制器中,创建dog类;

#import "ViewController.h"

#import "Dog.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    Dog *dog = [Person new];

    

    [dog run];

    [dog eat];



以上就是面向对象编程的调用方法,只能单一点用,写起来比较繁琐;


接下来介绍链式编程思想,所谓链式编程,就是多个方法的调用可以像链条一样连接在一起,使代码的书写更简洁,可读性更好;

就像这样:

[[dog run1] eat1];

要想实现方法的这种调用方式,可以这样定义

- (Dog *)run1 {

    NSLog(@"%s", __FUNCTION__);

    

    return self;

}


- (Dog *)eat1 {

    NSLog(@"%s", __FUNCTION__);

    

    return self;

}

即每个方法都返回调用它的对象,以供调用后面的方法,这样,返回的对象就像一个链条,连接起了每个方法;


下面说一下函数式编程:

    dog.run2().eat2();

    dog.eat2().run2();

    dog.run2().run2().eat2().run2();

要想实现这种调用方式,可以这样定义方法

//返回一个BlockBlock返回self

- (Dog * (^)())run2 {

    

    Dog * (^runBlock)() = ^ {


        NSLog(@"run2");


        return self;

    };  

    return runBlock;

}


- (Dog *(^)())eat2 {

    

    return ^ {


        NSLog(@"");


        return self;

    };

}


通过Block返回的对象,调用后面的方法,从而实现了这种调用方式;当然如果想有参数,还可以这么写

- (Dog *(^)(NSString *))eat3 {

    

    return ^ (NSString *food) {

        NSLog(@"%@", food);

        

        return self;

    };

}


- (Dog *(^)(double))run3 {

    

    return  ^ (double distance) {

      

        NSLog(@" %f米", distance);

        

        return self;

    };

}

以上写法就可以这样来调用

dog.run3(500).eat3(@"骨头").run3(1000).eat3(@"便便");


写到这里相信大家已经发现,masonry框架就是采用这种编程思想;


下面再来说说响应式编程思想,响应式编程就是一种面向数据流和变化传播的编程范式。就是说可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。

说人话就是,你在view中修改数据,model中会跟着变,在model中修改数据,view显示也跟着变,要实现这种效果,iOS开发中,要想实现这种效果,可以使用KVO,但是!苹果的KVO会统一调用同一个方法,且方法固定不变,当要监听的对象过多,十分难以管理维护;



说到这里,答案已经明了,RAC之所以叫函数响应式编程框架,就是因为她包含了函数式编程思想,和响应式编程思想;

好了,时间不早,洗洗睡觉,至于RAC的具体用法和实现,请期待下回分解!


 类似资料: