Once All Are Done Do Something With All,可以通过:
[[RACSignal combineLatest:@[connectUsersSignal,facebookUsersSignal,applicationUsersSignal]] subscribeNext:^(RACTuple *users) {
NSArray *connectedUsers = [users first];
NSArray *facebookUsers = [users second];
NSArray *applicationUsers = [users third];
}];
缺少的另一部分是如何使applicationUsersSignal 依赖于facbookUsersSignal。可以这样做:
- (RACSignal *)applicationUsersSignalWithFacebookUsersSignal:(RACSignal *)fbSignal
{
return [fbSignal flattenMap:^RACStream *(NSArray *facebookUsers) {
return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
// Do what you have to do with the facebookUsers
return nil;
}];
}];
}
只是为答案添加更多内容。我假设这些是冷信号(尚未开始的信号,也就是尚未订阅的信号)。因此,使用combineLatest: 的想法是,您希望捕获每个信号至少发送一个next、after that you subscribe to it so it can begin 的点。最后,您可以从RACTuple 获取它们的值。
我重新阅读了您的问题,您希望它们全部放在一个数组中:
[[[RACSignal combineLatest:@[connectUsersSignal,facebookUsersSignal,applicationUsersSignal]] map:^id(RACTuple *allArrays) {
return [allArrays.rac_sequence foldLeftWithStart:[NSMutableArray array] reduce:^id(id accumulator, id value) {
[accumulator addObjectsFromArray:value];
return accumulator;
}];
}] subscribeNext:^(NSArray *allUsers) {
// Do Something
}];