RAC 中的信号组合

作者: 哦呵呵y | 来源:发表于2019-01-17 12:18 被阅读10次

一、combineLatest

    RACSubject *signal1 = [RACSubject subject];
    RACSubject *signal2 = [RACSubject subject];
    
    [[RACSignal combineLatest:@[signal1, signal2]] subscribeNext:^(RACTuple * _Nullable x) {
        NSLog(@"combineLatest 回调  %@", x);
    }];
    
    [signal1 sendNext:@"1"];
    [signal2 sendNext:@"A"];
    [signal1 sendNext:@"2"];
    [signal2 sendNext:@"B"];
    [signal1 sendNext:@"3"];
    [signal2 sendNext:@"C"];
// 控制台输出
combineLatest 回调  <RACTuple: 0x1c0012000> (
    1,
    A
)
combineLatest 回调  <RACTuple: 0x1c0012070> (
    2,
    A
)
combineLatest 回调  <RACTuple: 0x1c00120b0> (
    2,
    B
)
combineLatest 回调  <RACTuple: 0x1c0012120> (
    3,
    B
)
combineLatest 回调  <RACTuple: 0x1c0012160> (
    3,
    C
)

signal1:  1             2                 3
signal2:      A                 B                      C
result:       A1        A2      B2        B3           C3
>>>>>>>> time >>>>>>>>

combineLatest 用于合并多个信号,当所以信号都收到消息,才会触发回调。回调内容为各个信号最新信息的元组
可用于对 提交按钮是否禁用 的控制,例如登录页面,当账号密码信号全部满足条件时触发 并且可用 combineLatest的变形方法 + (RACSignal *)combineLatest:(id<NSFastEnumeration>)signals reduce:(RACGenericReduceBlock)reduceBlock 利用reduceBlock 对回调数据过滤返回新的内容

二、zip

    RACSubject *signal1 = [RACSubject subject];
    RACSubject *signal2 = [RACSubject subject];
    
    [[RACSignal zip:@[signal1, signal2]] subscribeNext:^(RACTuple * _Nullable x) {
        NSLog(@"zip 回调  %@", x);
    }];
    
    [signal1 sendNext:@"1"];
    [signal2 sendNext:@"A"];
    [signal1 sendNext:@"2"];
    [signal2 sendNext:@"B"];
    [signal1 sendNext:@"3"];
    [signal2 sendNext:@"C"];
// 控制台输出
zip 回调  <RACTuple: 0x1c401ea00> (
    1,
    A
)
 zip 回调  <RACTuple: 0x1c401ea80> (
    2,
    B
)
 zip 回调  <RACTuple: 0x1c401eb00> (
    3,
    C
)

signal1:  1             2                 3
signal2:      A                 B                      C
result:        A1               B2                    C3
>>>>>>>> time >>>>>>>>

zip 效果与combineLatest类似,都是用来合并多个信号,当所有信号都收到消息才会回调, 不同的是combineLatest 每次会返回各个信号最后一条消息,而zip是按顺序取出各个信号然后合并发出的.也就是说,各个信息的第一条消息进行合并回调,第二条消息合并回调,以此类推,只有各个信息同序号都有消息时才会回调。

三、merge

    RACSubject *signal1 = [RACSubject subject];
    RACSubject *signal2 = [RACSubject subject];

    [[RACSignal merge:@[signal1, signal2, signal3]] subscribeNext:^(RACTuple * _Nullable x) {
        NSLog(@"merge 回调  %@", x);
    }];
    
    [signal1 sendNext:@"1"];
    [signal2 sendNext:@"2"];
// 控制台输出
merge 回调  1
merge 回调  2

merge 用于统一管理多个信号回调,每个信号收到消息时,都会进行的回调

相关文章

  • RAC 中的信号组合

    一、combineLatest combineLatest 用于合并多个信号,当所以信号都收到消息,才会触发回调。...

  • RAC信号组合

    转自iOS开发 「RAC」RAC信号组合的妙用[https://www.jianshu.com/p/eba85d2...

  • 6.RAC之组合信号

    RAC的组合信号有以下几种 1. concat concat组合信号,让信号按照顺序去执行。假如我们现在有这么一个...

  • 01-ReactiveObjC使用记录

    RAC 的核心思想:创建信号 - 订阅信号 - 发送信号 ,并且在 RAC 中我们会看到大量的 block RAC...

  • RAC之信号组合

    1.1,依赖concat,比如A请求依赖B请求,只有B请求完成之后才能执行A请求或操作 1.2,依赖then,比如...

  • ReactiveCocoa

    一、RAC的基本概念信号RACSignal: 信号是RAC中最核心的概念,贯穿在整个RAC框架中。它其实是一个信号...

  • iOS开发 「RAC」RAC信号组合的妙用

    • concat:按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号,依赖关系把一组信号串联起来,前面一个...

  • rac 事件概述及处理

    概述:想要知道rac就必须知道rac中的三个要点 创建信号、发送信号、订阅信号。 reactive事件 reac...

  • RAC的基本使用

    RAC的基本使用 在RAC中,一切都是信号! RACSignal RACSignal实例化一个信号,首先,需要创建...

  • iOS-ReactiveObjC(RAC) 学习笔记

    RAC简介 在RAC中,万物皆信号。RAC 指的就是 RactiveCocoa ,是 Github 的一个开源框架...

网友评论

    本文标题:RAC 中的信号组合

    本文链接:https://www.haomeiwen.com/subject/mmobdqtx.html