ReactiveCocoa应用篇(二)

上一篇介绍了ReactiveCocoa的常用类,已经基本满足项目中的简单应用要求,但是针对复杂的功能还需要其它的类来协同处理。ReactiveCocoa提供了强大的流程处理功能来解决复杂的问题,包括事件点击、代理、通知、事件同步和异步等等,可以简化代码体量,实现 高聚合、低耦合 的编程思想。下面ReactiveCocoa的更强大的功能:

一. RACTuple、RACSequence

RACTuple: 元组类,类似NSArray,在解构对象中经常使用

RACSequence: 集合类,使用它来快速遍历数组和字典

二. RACScheduler、RACUnit、RACEvent

RACScheduler: RAC中的队列,用GCD封装的

RACUnit: 表⽰stream不包含有意义的值,也就是看到这个,可以直接理解为nil

RACEvent: 把数据包装成信号事件(signal event)。它主要通过RACSignal的-materialize来使用,然并卵

三. 事件监听

  • 代替代理: rac_signalForSelector

之前需要遵守代理协议、赋值delegate、实现代理方法等都不需要,只用rac_signalForSelector就可以实现

  • 代替KVO:rac_valuesAndChangesForKeyPath

  • 监听事件:rac_signalForControlEvents

  • 代替通知:rac_addObserverForName

  • 监听文本框文字改变:rac_textSignal

  • 同步信号:rac_liftSelector:withSignalsFromArray:Signals

四. 常见宏

  • RAC: 于给某个对象的某个属性绑定

  • RACObserve: 监听某个对象的某个属性,返回的是信号

  • @weakify(Obj)和@strongify(Obj):处理闭包强引用
  • RACTupleRACTupleUnpack: 元组的构造与解构

五. 常用操作方法之映射

1. flattenMap

flattenMap作用:把源信号的内容映射成一个新的信号,信号可以是任意类型

  • 使用步骤

  • 底层实现

  • 代码实现

2. Map

把源信号的值映射成一个新的值,返回一个对象

  • 使用步骤

  • 底层实现

  • 代码实现

六. 操作方法之组合

1. concat

按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号

  • 底层实现

  • 代码实现

2. then

用于连接两个信号,当第一个信号完成,才会连接then返回的信号。注意使用then,之前信号的值会被忽略掉

  • 底层实现

  • 代码实现

3. merge

把多个信号合并为一个信号,任何一个信号有新值的时候就会调用

  • 底层实现

  • 代码实现

4. zipWith

把两个信号压缩成一个信号,只有当两个信号同时发出信号内容时,并且把两个信号的内容合并成一个元组,才会触发压缩流的next事件

  • 底层实现

  • 代码实现

5.reduce

用于信号发出的内容是元组,把信号发出元组的值聚合成一个值

  • 底层实现

  • 代码实现

6. combine

把两个信号组合成一个信号,跟zip一样,没什么区别

  • 底层实现

  • 代码实现

七、操作方法之过滤

1. filter

使用它可以获取满足条件的信号

  • 代码实现

2.ignore

忽略某些值的信号

  • 代码实现

3.distinctUntilChanged

当上一次的值和当前的值有明显的变化就会发出信号,否则会被忽略掉

  • 代码实现

4.take

从开始一共取N次的信号
– 代码实现

5. takeLast

取最后N次的信号,前提条件,订阅者必须调用完成,因为只有完成,就知道总共有多少信号

  • 代码实现

6.takeUntil

获取信号直到执行完这个信号,当发送信号为空或结束时,后面有发送的信号,也不会执行

  • 代码实现

7.skip

跳过几个信号,不接受
– 代码实现

八、操作方法之秩序

  • 执行Next之前,会先执行这个Block
  • 执行sendCompleted之前,会先执行这个Block

九、操作方法之线程

  • deliverOn
    内容传递切换到制定线程中,副作用在原来线程中,把在创建信号时block中的代码称之为副作用

具体应用

  • subscribeOn
    内容传递和副作用都会切换到制定线程中

具体应用

十、操作方法之时间

1.timeout

超时,可以让一个信号在一定的时间后,自动报错

2.interval

定时:每隔一段时间发出信号

3. delay

延迟发送next

十一、操作方法之重复

1. retry

只要失败,就会重新执行创建信号中的block,直到成功.

2. replay

当一个信号被多次订阅,反复播放内容

3. throttle

当某个信号发送比较频繁时,可以使用节流,在某一段时间不发送信号内容,过了一段时间获取信号的最新内容发出


感觉不错,打个赏?
微信                                 支付宝
pay_weixin            pay_zhifubao
金额随意 快来“”我呀~
联系方式:kelvin@fishbay.cn

发表评论

电子邮件地址不会被公开。 必填项已用*标注