最近,在开发中为是开发更加方便,开始使用ReactiveCocoa框架,使得自己的开发更有逼格.虽然之前在开发中有所接触,但是使用起来还是有点困难,所以在使用一段时间后,我就自己的使用情况进行了总结.
ReactiveCocoa结合了几种编程风格:
函数式编程(Functional Programming):使用高阶函数,例如函数用其他函数作为参数。
响应式编程(Reactive Programming):关注于数据流和变化传播。
所有的信号(RACSignal)都可以进行操作处理,因为所有操作方法都定义在RACStream.h中,因此只要继承RACStream就有了操作处理方法
运用的是Hook(钩子)思想,Hook是一种用于改变API(应用程序编程接口:方法)执行结果的技术. Hook用处:截获API调用的技术。 Hook原理:在每次调用一个API返回结果之前,先执行你自己的方法,改变结果的输出
ReactiveCocoa核心方法bind(对绑定思想的理解)
ReactiveCocoa操作的核心方法是bind(绑定),而且RAC中核心开发方式,也是绑定,之前的开发方式是赋值,而用RAC开发,应该把重心放在绑定,也就是可以在创建一个对象的时候,就绑定好以后想要做的事情,而不是等赋值之后在去做事情
sendNext 代表信号可以使用next事件发送下一个 value 给 subscribers 这个值为nil
1)映射:flattenMap,Map用于把源信号内容映射成新的内容
2)组合:concat:按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号
3)then
:用于连接两个信号,当第一个信号完成,才会连接then返回的信号
4)merge
:把多个信号合并为一个信号,任何一个信号有新值的时候就会调用
5)combineLatest
:将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号。
6)reduce
聚合:用于信号发出的内容是元组,把信号发出元组的值聚合成一个值
7)filter:过滤信号,使用它可以获取满足条件的信号.
8) ignore:忽略完某些值的信号.
9) distinctUntilChanged:当上一次的值和当前的值有明显的变化就会发出信号,否则会被忽略掉
10) take:从开始一共取N次的信号
11)takeLast:取最后N次的信号,前提条件,订阅者必须调用完成,因为只有完成,就知道总共有多少信号
12)takeUntil:(RACSignal *):获取信号直到某个信号执行完成
13)skip:(NSUInteger):跳过几个信号,不接受
14)switchToLatest:用于signalOfSignals(信号的信号),有时候信号也会发出信号,会在signalOfSignals中,获取signalOfSignals发送的最新信号
15)doNext: 执行Next之前,会先执行这个Block
16)doCompleted: 执行sendCompleted之前,会先执行这个Block
17)deliverOn: 内容传递切换到制定线程中,副作用在原来线程中,把在创建信号时block中的代码称之为副作用
18)subscribeOn: 内容传递和副作用都会切换到制定线程中
19)interval 定时:每隔一段时间发出信号
20)delay 延迟发送next。
21) 代替代理:
rac_signalForSelector:用于替代代理。
22) 代替KVO :
rac_valuesAndChangesForKeyPath:用于监听某个对象的属性改变。
23) 监听事件:
rac_signalForControlEvents:用于监听某个事件。
24) 代替通知:
rac_addObserverForName:用于监听某个通知。
25) 监听文本框文字改变:
rac_textSignal:只要文本框发出改变就会发出这个信号。
26) 处理当界面有多次请求时,需要都获取到数据时,才能展示界面
rac_liftSelector:withSignalsFromArray:Signals:当传入的Signals(信号数组),每一个signal都至少sendNext过一次,就会去触发第一个selector参数的方法。
使用注意:几个信号,参数一的方法就几个参数,每个参数对应信号发出的数据