RAC中组合的使用

  1. concat
  2. then
  3. merge
  4. zipWith
  5. combineLatest
  6. reduce
1. concat

RACSignal signalA = [RACSignal createSignal:^RACDisposable _Nullable(id _Nonnull subscriber) {
NSLog(@”请求A”);
[subscriber sendNext:@”A数据”];
// A完成
[subscriber sendCompleted];
return nil;
}];
RACSignal signalB = [RACSignal createSignal:^RACDisposable _Nullable(id _Nonnull subscriber) {
NSLog(@”请求B”);
[subscriber sendNext:@”B数据”];
// B完成
[subscriber sendCompleted];
return nil;
}];
// concat:按顺序去连接
// 创建组合信号
RACSignal *concatSignal = [signalA concat:signalB];
// 订阅组合信号
// 注意:第一个信号必须调用sendCompleted
[concatSignal subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
这里写图片描述

2. then

RACSignal signalA = [RACSignal createSignal:^RACDisposable _Nullable(id _Nonnull subscriber) {
NSLog(@”请求A”);
[subscriber sendNext:@”A数据”];
// A完成
[subscriber sendCompleted];
return nil;
}];
RACSignal signalB = [RACSignal createSignal:^RACDisposable _Nullable(id _Nonnull subscriber) {
NSLog(@”请求B”);
[subscriber sendNext:@”B数据”];
// B完成
[subscriber sendCompleted];
return nil;
}];
// 抛掉了第一部分反馈的数据,只能获取最后一部分的数据
RACSignal thenSignal = [signalA then:^RACSignal _Nonnull{
return signalB;
}];
[thenSignal subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
这里写图片描述

3. merge:

RACSubject *signalA = [RACSubject subject];
RACSubject *signalB = [RACSubject subject];
// 组合信号
RACSignal *mergeSignal = [signalA merge:signalB];
// 订阅
[mergeSignal subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
// 两个信号任意一个发送数据都会执行组合订阅
[signalA sendNext:@”A”];
[signalB sendNext:@”B”];
这里写图片描述

4. zipWith:
把两个信号压缩成一个信号。只有当两个信号同时发出信号内容时,才能够触发组合信号。并且把两个信号发送的数据合并成一个元组。
等到组合信号中的所有信号都发送完成后,才会执行组合信号中的block。

RACSubject *signalA = [RACSubject subject];
RACSubject *signalB = [RACSubject subject];
// 组合信号
RACSignal *zipSignal = [signalA zipWith:signalB];
// 订阅
[zipSignal subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
[signalA sendNext:@”A”];
[signalB sendNext:@”B”];
这里写图片描述

combineLatest 与 reduce 联合使用
  • combineLatest : 将多个信号合并起来,并且拿到各个信号的最新值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号。
  • 聚合:用于信号发出的内容时元组,把信号发出元组的值聚合成一个值

// 创建组合信号
// reduceBlock参数:跟组合的信号有关,且一一对应
RACSignal *combineSignal = [RACSignal combineLatest:@[_pwdFiled.rac_textSignal, _accountField.rac_textSignal] reduce:^id(NSString *pwd, NSString *account){
// block:只要源信号发送内容就会调用,组合成一个新值
// 聚合的值就是组合信号的内容
NSLog(@”%@ %@”, account, pwd);
return @(account.length && pwd.length);
}];
// 订阅信号
[combineSignal subscribeNext:^(id _Nullable x) {
_loginBtn.enabled = [x boolValue];
}];
// 宏的方式订阅
RAC(_loginBtn, enabled) = combineSignal;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值