2016-11-15 5 views
0

Я не знаю, как слить много сигналов и получить результаты от RACTuple, кажется, это похоже на легкий ответ, но я не могу этого найти.Получить RACTuple из объединенных сигналов

Что мы имеем для exmaple:

NSArray *a = @[@{@"k1":@"v1"}, 
       @{@"k2":@"v2"}, 
       @{@"k3":@"v3"}, 
       @{@"k4":@"v4"}, 
       @{@"k5":@"v5"}, 
       @{@"k6":@"v6"}, 
       @{@"k7":@"v7"}]; 
NSArray *b = @[@{@"kk1":@"vv1"}, 
       @{@"kk2":@"vv2"}, 
       @{@"kk3":@"vv3"}, 
       @{@"kk4":@"vv4"}, 
       @{@"kk5":@"vv5"}, 
       @{@"kk6":@"vv6"}, 
       @{@"kk7":@"vv7"}]; 

и

 RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) { 
      RACSignal *s1 = [self adaptObjects:a]; 
      RACSignal *s2 = [self adaptObjects:b]; 
      return [[RACSignal merge:@[s1,s2]] map:^id(id value) { 
       return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { 
        [subscriber sendNext:value]; 
        return nil; 
       }]; 
      }]; 
     }]; 

     [[command execute:nil] subscribeNext:^(RACTuple *x) { 
      NSLog(@"%@",x); 
     }]; 

этого оператора map неправильно, я знаю, что, но это, например

- (RACSignal *)adaptObjects:(NSArray *)objects { 
    return [objects.rac_sequence.signal flattenMap:^RACStream *(id x) { 
     return [self adaptObject:x]; 
    }]; 
} 

- (RACSignal*)adaptObject:(NSDictionary*) x { 
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { 

     // some operations with data here 

     [subscriber sendNext:x]; 

     return nil; 
    }]; 
} 

В NSLog Я хочу для получения результата кортежа с двумя массивами сначала - s1, second - s2 Thx

ответ

3

Я написал небольшой пример, надеюсь, он вам поможет.

NSArray *a = @[@{@"k1":@"v1"}, 
       @{@"k2":@"v2"}, 
       @{@"k3":@"v3"}, 
       @{@"k4":@"v4"}, 
       @{@"k5":@"v5"}, 
       @{@"k6":@"v6"}, 
       @{@"k7":@"v7"}]; 

NSArray *b = @[@{@"kk1":@"vv1"}, 
       @{@"kk2":@"vv2"}, 
       @{@"kk3":@"vv3"}, 
       @{@"kk4":@"vv4"}, 
       @{@"kk5":@"vv5"}, 
       @{@"kk6":@"vv6"}, 
       @{@"kk7":@"vv7"}]; 

- (NSArray<RACSignal *> *)rac_signalsFromArray:(NSArray *)array { 
    NSMutableArray<RACSignal *> *signals = [NSMutableArray array]; 
    for (NSDictionary *dict in array) { 
     [signals addObject:[RACSignal return:dict]]; 
    } 
    return signals; 
} 

NSArray *Asignals = [self rac_signalsFromArray:a]; 
NSArray *Bsignals = [self rac_signalsFromArray:b]; 

NSArray *signals = [[NSArray arrayWithArray:Asignals] arrayByAddingObjectsFromArray:Bsignals]; 

[[RACSignal zip:signals] subscribeNext:^(RACTuple *tuple) { 
    // tuple here 
}]; 
+0

Да, его хороший пример. Я пропустил тот факт, что мы можем связать любой объект с RACSignal методом 'return:'. Спасибо –

Смежные вопросы