概述
- concat
- then
- merge
- zipWith
- combineLatest
- 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;
最后
以上就是踏实外套为你收集整理的RAC中组合的使用的全部内容,希望文章能够帮你解决RAC中组合的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复