一 简介
ReactiveCocoa是支持函数式响应式编程(functional reactive programming)的框架,由GitHub开发参考这里的简介,官方网址为:https://github.com/ReactiveCocoa.
二 优点
(1) 代码更精简
越少的代码,相对效率更高
(2) 封装了KVO
框架将state的变化转化为signal来处理,可以方便地实现对key和value的观察;
上图很好地阐述了使用信号(RACSignal)来取代之前的:
- delegate
- block callbacks
- target action
- kvo
- notifications
(3) 逻辑更清晰,可维护性更高
之前的代码大量使用delegate,notification等来处理回调结果,逻辑分散
(4) 函数本身可以作为参数,也可作为返回值
三 基础知识[参考来源]
Signal
在Reactive Cocoa中,RASSignal是一个基本组件,代表会传递到未来的事件流。订阅了该信号的对象在该事件发生时可以对事件进行相应响应。Signal是一个推送驱动(push-driven)的流,能代表按钮点击、异步网络操作、定时器、其它UI事件及任何其它随时间改变的事物。SequenceSequence 是一个拉取型(push-driven)的流,类似NSArray目的的集合(Collection)。RACSequence允许CocoaCollections以统一和声明式方式执行。
Command
RACCommand创建了一个signal的订阅者从而响应某个动作。ReactiveCocoa对绝大部分UIKit
Controls提供了丰富的UI事件处理,方便对不同场景绘制相应的UI效果。
Signal Operations:
针对RACSignals进行的基本操作及函数原型如下:
(1)Merge
+ (RACSignal *)merge:(id<NSFastEnumeration>)signals;
(2)CombineLates
+ (RACSignal *)combineLatest:(id<NSFastEnumeration>)signals reduce:(id (^)())reduceBlock;
(3)FlatternMap
-(RACSignal*)flattenMap:(RACStream * (^)(id value))block;
(4)Legend
+ [FBSession rac_openedSession]
返回打开的FB会话类实例,在必要时引向Facebook登陆。
- [FBSession rac_fetchProfile]
接受会话的简介( profile )
(5)Filter
- (RACSignal *)filter:(BOOL (^)(id value))block;
(6)Map
- (RACSignal *)map:(id (^)(id value))block;
(7)Zip
+ (RACSignal *)zip:(id<NSFastEnumeration>)streams reduce:(id (^)())reduceBlock;
(8)Throttle
- (RACSignal *)throttle:(NSTimeInterval)interval;
(9)Delay
-(RACSignal *)delay:(NSTimeInterval)interval;