Cla*_*ges 4 objective-c reactive-programming reactive-cocoa
考虑ReactiveCocoa简介中的一个示例(释义),该示例根据.password和.passwordConfirm文本字段是否匹配来启用:
RAC(self.enabled) = [RACSignal
combineLatest:@[ RACAble(self.password), RACAble(self.passwordConfirm) ]
reduce:^(NSString *password, NSString *passwordConfirm) {
return @([passwordConfirm isEqualToString:password]);
}];
Run Code Online (Sandbox Code Playgroud)
在这里,我们在编译时知道我们正在组合多少和什么东西,并且将"combine"数组解构/映射到reduce块的多个参数是有用的.什么时候不起作用.例如,如果你想:
RAC(self.enabled) = [RACSignal
combineLatest:arrayOfSignals
reduceAll:^(NSArray *signalValues) { // made this up! don't try at home.
// something ...
}];
Run Code Online (Sandbox Code Playgroud)
你如何用ReactiveCocoa做到这一点?
更新:接受的答案的评论有助于解释我所缺少的内容.
你可以使用map:
RAC(self.enabled) = [[RACSignal combineLatest:arrayOfSignals]
map:^(RACTuple *signalValues) {
// something
}
];
Run Code Online (Sandbox Code Playgroud)
A 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];
}]);
}
];
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
2668 次 |
| 最近记录: |