How to accomplish this with ReactiveCocoa

I am creating a feature where users of my application can find their friends on Facebook and add them to the application. I need to take three steps:

  • Get Connected Users
  • Get Facebook Users
  • Get application users (it depends on step 2)

Once all of these are complete, I need to combine / flatten the three resulting arrays into a final array.

I created three functions that return RACSignal

getUsersWithFacebookIds, getConnectedUsersandgetFacebookUsers

I am not sure how to relate all this with ReactiveCocoa.

enter image description here

+4
source share
1 answer

Once All Are Done Do Something With Allcan be achieved using

[[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, , , . , 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
}];
+7

All Articles