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<RACSubscriber> subscriber) {
        i += 1;
        DLog(@"A1 x: %d", i);
        [subscriber sendNext:@(i)];
        [subscriber sendCompleted];
       return nil];
    }];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容