1、demo地址
https://github.com/codepgq/RACDemo
2、参考资料&文档
http://www.noobyard.com/article/p-nlyboewu-ez.html
最快让你上手ReactiveCocoa之基础篇
https://www.jianshu.com/p/87ef6720a096
最快让你上手ReactiveCocoa之进阶篇
https://www.jianshu.com/p/e10e5ca413b7
https://www.jianshu.com/p/58a1214fc6d8
https://www.jianshu.com/p/d3792ca614d9/
https://www.jianshu.com/p/289c9c694588
https://cloud.tencent.com/developer/news/297159
https://www.jianshu.com/p/0a98c6a6facc
https://juejin.cn/post/6844903574690856968
RAC语法、用法
RAC语法
https://www.jianshu.com/p/d3792ca614d9/
ReactiveCocoa 常见用法
代替代理
rac_signalForSelector 用户代替代理
代替 KVO
rac_valuesAndChangesForKeyPath 用于监听某个对象的某个属性的改变
代替事件监听
rac_signalForControlEvents 用于监听某个事件
代替通知
rac_addObserverForName 用于监听某个通知,且不须要在 - (void)dealloc 中移除监听
监听文本框文字改变
rac_textSignal 用于监听文本框文字变化
代替手势
rac_gestureSignal 用于监听手势操做
多个请求完成时,再执行后继操做
rac_liftSelector:withSignalsFromArray:Signals 当传入的 Signals,每个 Signal 都至少 sendNext 过一次,就会去触发第一个 selector 参数的方法。
信号的相关操做
bind :函数会返回一个新的信号 N。总体思路是对原信号 O 进行订阅,每当信号 O 产生一个值就将其转变成一个中间信号 M ,并立刻订阅 M ,以后将信号M的输出做为新信号 N 的输出。
map \ flattenMap :用于把源信号内容映射成新的内容(信号)。
concat :组合,按必定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号。
then :用于链接两个信号,当第一个信号完成,才会链接 then 返回的信号。
merge :把多个信号合并为一个信号,任何一个信号有新值的时候就会调用。
zipWith :把两个信号压缩成一个信号,只有当两个信号同时发出信号内容时,而且把两个信号的内容合并成一个元组,才会触发压缩流的 next 事件。
combineLatest :将多个信号合并起来,而且拿到各个信号的最新的值,必须每一个合并的 signal 至少都有过一次 sendNext ,才会触发合并的信号。
reduce :聚合,用于信号发出的内容是元组,把信号发出元组的值聚合成一个值。
filter :过滤信号,使用它能够获取知足条件的信号。
ignore :忽略某些值的信号,使用 RACObserve 时可配合使用,其实现由 filter 完成。
distinctUntilChanged :实现是用 bind 来完成的,每次变换中都记录一下原信号上一次发送过来的值,并与这一次进行比较,若是是相同的值,就「吞」掉,返回 empty 信号。只有和原信号上一次发送的值不一样,变换后的新信号才把这个值发送出来。
take :从开始一共取 N 次的信号。
takeLast :取最后 N 次的信号,前提条件:订阅者必须调用完成,由于只有完成,才知道总共有多少信号。
takeUntil :获取信号直到某个信号执行完成。
skip :跳过几个信号,不接受。
switchToLatest :用于 signalOfSignals (信号的信号),有时候信号也会发出信号,会在 signalOfSignals 中,获取 signalOfSignals 发送的最新信号。
doNext :执行 next 以前,会先执行这个 Block 。
doCompleted :执行 sendCompleted 以前,会先执行这个Block 。
timeout :超时,可让一个信号在必定的时间后,自动报错。
interval :定时:每隔一段时间发出信号。
delay :延迟发送 next 。
retry :重试,只要失败,就会从新执行建立信号中的 block ,直到成功。
replay :重放,当一个信号被屡次订阅,反复播放内容。
throttle :节流,当某个信号发送比较频繁时,可使用节流,在某一段时间不发送信号内容,过了一段时间获取信号的最新内容发出。
ReactiveCocoa 常见宏
RAC(TARGET, ...) 用于绑定某个对象的某个属性
RACObserve(TARGET, KEYPATH) 用于监听某个对象的某个属性,返回的是信号
@weakify(Obj) & @strongify(Obj) 配套使用