【问题标题】:Get RACTuple from merged signals从合并的信号中获取 RACTuple
【发布时间】:2016-11-15 13:12:32
【问题描述】:

我不知道如何合并大量信号并从 RACTuple 中获取结果,这似乎很容易回答,但我找不到。

我们有什么例如:

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,第二个 - s2 谢谢

【问题讨论】:

    标签: ios reactive-cocoa


    【解决方案1】:

    我写了一个小例子,希望对你有帮助。

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

    【讨论】:

    • 是的,这是一个很好的例子。我错过了我们可以通过return: 方法将任何对象包装到 RACSignal 的事实。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多