ReactiveCocoa 操作之信号处理
1,映射(flattenMap,Map)
- flattenMap,Map用于把源信号内容映射成新的内容
flattenMap
作用:把源信号的内容映射成一个新的信号,信号可以是任意类型。
|
|
Map
作用:把源信号的值映射成一个新的值
|
|
FlatternMap和Map的区别
1.FlatternMap中的Block返回信号。
2.Map中的Block返回对象。
3.开发中,如果信号发出的值不是信号,映射一般使用Map
4.开发中,如果信号发出的值是信号,映射一般使用FlatternMap
2,组合
concat
:按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号。
|
|
then
:用于连接两个信号,当第一个信号完成,才会连接then返回的信号。
|
|
merge
:把多个信号合并为一个信号,任何一个信号有新值的时候就会调用12345678910111213141516171819202122232425// merge:把多个信号合并成一个信号//创建多个信号RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {[subscriber sendNext:@1];return nil;}];RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {[subscriber sendNext:@2];return nil;}];// 合并信号,任何一个信号发送数据,都能监听到.RACSignal *mergeSignal = [signalA merge:signalB];[mergeSignal subscribeNext:^(id x) {NSLog(@"%@",x);}];
zipWith
:把两个信号压缩成一个信号,只有当两个信号同时发出信号内容时,并且把两个信号的内容合并成一个元组,才会触发压缩流的next事件。123456789101112131415161718192021222324RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {[subscriber sendNext:@1];return nil;}];RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {[subscriber sendNext:@2];return nil;}];// 压缩信号A,信号BRACSignal *zipSignal = [signalA zipWith:signalB];[zipSignal subscribeNext:^(id x) {NSLog(@"%@",x);}];combineLatest
:将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号。123456789101112131415161718192021RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {[subscriber sendNext:@1];return nil;}];RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {[subscriber sendNext:@2];return nil;}];// 把两个信号组合成一个信号,跟zip一样,没什么区别RACSignal *combineSignal = [signalA combineLatestWith:signalB];[combineSignal subscribeNext:^(id x) {NSLog(@"%@",x);}];
reduce
聚合:用于信号发出的内容是元组,把信号发出元组的值聚合成一个值
|
|
3,过滤
filter
:过滤信号,使用它可以获取满足条件的信号
|
|
ignore
:忽略完某些值的信号
|
|
distinctUntilChanged
:当上一次的值和当前的值有明显的变化就会发出信号,否则会被忽略掉。
|
|
take
:从开始一共取N次的信号
|
|
takeLast
:取最后N次的信号,前提条件,订阅者必须调用完成,因为只有完成,就知道总共有多少信号.
|
|
takeUntil
:(RACSignal *):获取信号直到某个信号执行完成
|
|
skip
:(NSUInteger):跳过几个信号,不接受
|
|
switchToLatest
:用于signalOfSignals(信号的信号),有时候信号也会发出信号,会在signalOfSignals中,获取signalOfSignals发送的最新信号。
|
|
3,秩序
doNext
: 执行Next之前,会先执行这个BlockdoCompleted
: 执行sendCompleted之前,会先执行这个Block
|
|
4,线程
deliverOn
: 内容传递切换到制定线程中,副作用在原来线程中,把在创建信号时block中的代码称之为副作用。subscribeOn
: 内容传递和副作用都会切换到制定线程中
5,时间
timeout
: 超时,可以让一个信号在一定的时间后,自动报错。
|
|
interval
: 定时:每隔一段时间发出信号
|
|
delay
延迟发送next
|
|
6,重复
retry
:重试 :只要失败,就会重新执行创建信号中的block,直到成功.
|
|
replay
:重放:当一个信号被多次订阅,反复播放内容
|
|
throttle
节流:当某个信号发送比较频繁时,可以使用节流,在某一段时间不发送信号内容,过了一段时间获取信号的最新内容发出。
|
|