0

假设我有一个数组arraySignal信号和一个对象信号addedObjectsSignal

我想定义第三个信号 ,modifiedArraySignal它从 中获取最新的数组,并将最新数组以来发送arraySignal的对象添加到其中。addedObjectsSignalarraySignal

这是一种方法:

    RACSignal *modifiedArraySignal =
    [[RACSignal
     merge:@[arraySignal, addedObjectsSignal]]
     scanWithStart:@[]
     reduce:^(id running, id next) {
         if ([next isKindOfClass:[NSArray class]])
             return next;
         else
             return [running arrayByAddingObject:next];
     }];

还有另一种不使用的方法-[NSObject isKindOfClass:]吗?

4

2 回答 2

2

最初是注释,但是,代码格式。

发送新数组时,是否要停止对先前数组的更新?换句话说,如果在发送阵列 B 之后,您是否希望阵列 A 和阵列 B 上的扫描同时操作?如果要停止对先前数组的更新,请使用-map:/-switchToLatest而不是-flattenMap:

RACSignal *modifiedArraySignal = [[arraySignal
    map:^(NSArray *array) {
        return [[addedObjectsSignal
            scanWithStart:array reduce:^(NSArray *running, id next) {
                return [running arrayByAddingObject:next];
            }]
            startWith:array];
    }]
    switchToLatest];
于 2013-08-18T14:30:31.603 回答
0

我想出了一个比我在问题中给出的解决方案更喜欢的解决方案,并且我认为它是等效的:

RACSignal * modifiedArraySignal =
[arraySignal flattenMap:^(NSArray *array) {
    return [[[addedObjectsSignal
            takeUntil:[arraySignal skip:1]]
            scanWithStart:array
            reduce:^(NSArray *running, id next) {
                return [running arrayByAddingObject:next];
            }]
            startWith:array];
}];
于 2013-08-17T19:03:36.840 回答