RACSignal:如何减少任意大型联合收割机

时间:2013-07-12 15:51:29

标签: objective-c reactive-programming reactive-cocoa

考虑ReactiveCocoa Introduction中的一个例子(释义) 根据{{​​1}}和.password文本字段是否匹配启用

.passwordConfirm

这里我们知道在编译时我们要合并多少和什么东西,将“combine”数组解构/映射到reduce块的多个参数是有用的。什么时候不起作用。例如,如果你想:

RAC(self.enabled) = [RACSignal 
    combineLatest:@[ RACAble(self.password), RACAble(self.passwordConfirm) ] 
    reduce:^(NSString *password, NSString *passwordConfirm) {
        return @([passwordConfirm isEqualToString:password]);
    }];

如何使用ReactiveCocoa完成此操作?

更新:接受的答案的评论有助于解释我所遗漏的内容。

1 个答案:

答案 0 :(得分:7)

您可以使用地图:

RAC(self.enabled) = [[RACSignal combineLatest:arrayOfSignals]
                     map:^(RACTuple *signalValues) {
                       // something
                     }
                    ];

RACTuple可以通过多种方式进行操作,它符合NSFastEnumeration,具有allObjects方法和rac_sequence方法。例如,您可以通过以下方式组合所有布尔值:

RAC(self.enabled) = [[RACSignal combineLatest:arrayOfSignals]
                     map:^(RACTuple *signalValues) {
                       return @([signalValues.rac_sequence all:^BOOL(NSNumber *value) {
                         return [value boolValue];
                       }]);
                     }
                    ];

希望它有所帮助。