RAC组合

作者: 幻梦_ | 来源:发表于2018-01-04 13:39 被阅读0次

concat 组合

  • 按一定顺序执行
  • 如我们处理网络请求时遇到先得到一个网络的返回再去请求另一个网络
  • 相当于必须先执行完信号A才会执行信号B这时就会用到concat
//信号A
    RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        NSLog(@"请求A数据");
        [subscriber sendNext:@"AAA"];
        [subscriber sendCompleted];//第一个信号必须调用sendCompleted
        return nil;
    }];
    
    //信号B
    RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        NSLog(@"请求B数据");
        [subscriber sendNext:@"BBB"];
        return nil;
    }];
    //按顺序执行信号先执行A,再执行B
    [[signalA concat:signalB] subscribeNext:^(id x) {
        //既能拿到A信号的值,又能拿到B信号的值
        NSLog(@"%@",x);
    }];

then

  • 注意: 使用then之前的信号的值会被忽略掉.
    //忽略A 拿到B的数据
    [[signalA then:^RACSignal * _Nonnull{
       //返回信号就是需要组合的信号
        return signalB;
    }] subscribeNext:^(id  _Nullable x) {
        NSLog(@"%@",x);
    }];

merge

  • 把多个信号合并为一个信号,任何一个信号有新值的时候就会调用,没有顺序
  • 哪个先发送 就先执行哪个
RACSubject *subjectA = [RACSubject subject];
    RACSubject *subjectB = [RACSubject subject];
    RACSignal *mergeSignal = [subjectA merge:subjectB];
    [mergeSignal subscribeNext:^(id x) {
        //任意一个信号发送内容都回来到这个block
        NSLog(@"%@",x);
    }];
    [subjectB sendNext:@"B"];
    [subjectA sendNext:@"A"];

zipWith

  • 把两个信号压缩成一个信号,只有当两个信号同时发出信号内容时,并且把两个信号的内容合并成一个元组
  • 打印顺序跟组合顺序,跟发送的顺序无关
RACSubject *subjectA = [RACSubject subject];
    RACSubject *subjectB = [RACSubject subject];
    //压缩成一个信号
    //zipWith:当一个界面有多个请求的时候,要等所有请求完成才能更新UI
    RACSignal *zipSignal = [subjectA zipWith:subjectB];
    [zipSignal subscribeNext:^(id x) {
        //x 是元祖类型
        NSLog(@"%@",x);
    }];
    [subjectA sendNext:@"1"];
    [subjectB sendNext:@"2"];

combineLatest

  • 当组合信号被订阅,内部会自动订阅signalA,signalB,必须两个信号都发出内容,才会被触发。
  • 并且把两个信号组合成元组发出。
    //创建信号A
    RACSubject*signalA = [RACSubject subject];
    //创建信号B
    RACSubject*signalB = [RACSubject subject];
    [[RACSignal combineLatest:@[signalA,signalB]]subscribeNext:^(RACTuple * _Nullable x) {
        NSLog(@"%@",x);
    }];
    [signalA sendNext:@"A"];
    [signalB sendNext:@"B"];

reduce聚合

  • 把信号发出元组的值聚合成一个值,可以把数据处理完成返回一个新的值
    //创建信号A
    RACSubject*signalA = [RACSubject subject];
    //创建信号B
    RACSubject*signalB = [RACSubject subject];
    [[RACSignal combineLatest:@[signalA,signalB] reduce:^id _Nullable(NSString *username,NSString *pwd){
        //处理数据
        return [NSString stringWithFormat:@"reduce--%@--%@",username,pwd];
    }]subscribeNext:^(id  _Nullable x) {
        NSLog(@"reduce--%@",x);
    }];
    [signalA sendNext:@"A"];
    [signalB sendNext:@"B"];

相关文章

  • RAC(三)

    本demo详见github 1.RAC过滤 2.RAC映射 3.RAC组合 4.RACBind 友情链接: RAC...

  • RAC 组合 then

    RACSignal *signalA = [RACSignal createSignal:^RACDisposa...

  • RAC组合

    concat 组合 按一定顺序执行 如我们处理网络请求时遇到先得到一个网络的返回再去请求另一个网络 相当于必须先执...

  • RAC组合

    concat then merge zipWith 组合和聚合

  • RAC信号组合

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

  • RAC之组合

    1.信号压缩: 当多个信号都发送的时候,才会处理Zip订阅信号; 2.信号聚合: 多个信号聚合在一起,然后发送信号:

  • RAC 组合concat

    concat组合!! left 信号的响应顺序先执行A 再执行B再C RACSignal *signalA = [...

  • RAC组合zip

    zipWith:两个信号压缩!只有当两个信号同事发出信号内容,并且将内容合并成一个元组给你 RACSubject ...

  • RAC 组合combine

    RAC(_btn,enabled) = [RACSignal combineLatest:@[_accountTe...

  • RAC组合Merge

    Merge: //创建信号 RACSubject *signalA = [RACSubject subject]...

网友评论

      本文标题:RAC组合

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