ReactiveCocoa 源码Review

背景

熟悉MVVM设计模式的朋友,想必对数据绑定Data Binding是相当了解了;MVVM的设计模式让VM(ViewModel)专注于数据处理,而所有的有关View的操作都在ViewController中处理,ViewController不仅要随时传递View层的用户交互事件,同时还要时刻监听ViewModel快递的数据,以便及时告诉View刷新数据并做出相应的UI响应。若不借助于第三方库,我们仅用iOS系统提供的如:Target-Action、KVO、NSNotification等等来实现MVVM的话,那精简的代码(有时虽然并不能减少代码量,但可读性和易维护性得以提高了)和LightweightViewController的就很难实现了,因此,RAC(ReactiveCocoa)应运而生。

简介

RAC的出现是受函数响应式编程FRP(Functional Reactive Programming)的启发,FRP是一种使用函数编程的构建块的响应式编程的编程思想,提供用于编写和转换值流的API,有兴趣的可以去这里(JS)看看。

源码

RAC是通过提供捕获当前和未来值的信号Signal(RACSignal)来描述值流streams of values的,每个Signal都包含着一个当前的或未来的Value,这个Value可能为空也可能为非空,要想拿到这个Value则必须订阅Subscribe这个Signal,订阅的方式有subscribeNext:、subscribeCompleted:等等。Signal就像期刊App中的期刊杂志,Subscribe Signal就像是在App中订阅了期刊杂志,订阅的内容的内容不仅可以自己看,还可以分享给你指定的人看,在订阅过程中Signal还可以被修改map、过滤filter、组合combine、链chain

__block int i = 0;
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
        i += 1;
        DLog(@"A1 x: %d", i);
        [subscriber sendNext:@(i)];
        [subscriber sendCompleted];
       return nil];
    }];

你可能感兴趣的:(ReactiveCocoa 源码Review)