2016-11-15 7 views
0

多くの信号をマージしてRACTupleから結果を得る方法がわかりませんが、簡単な答えのようですが、それを見つけることはできません。私たちがexmapleのために持ってマージされた信号からRACTupleを取得する

mapが間違っている

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); 
     }]; 

この演算子は、私がいることを知っているが、これは私が欲しいのNSLogでは例

- (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; 
    }]; 
} 

のためであります最初の2つの配列のタプル結果を表示する - 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:'メソッドでラップできるという事実を忘れてしまった。どうも –

関連する問題