作为 ReactiveCocoa 的新手,我希望得到一些建议:
我正在尝试创建一个包含多个从 XML 文件解析的 Field 对象的动态表单。每个 Field 都可以有多个验证规则,这些规则将针对 Field 的 NSString *value
参数运行。
对于问题的 RAC 部分-
在每个 Field 对象中,我想将 BOOL completed
绑定(bind)到一个信号,该信号根据一组规则检查 Field 的 *value
参数。到目前为止,我的想法是:
@implementation Field
self = [super init];
if (self) {
RAC(self, completed) = [RACObserve(self, value) filter:^BOOL(NSString *fieldValue) {
NSLog(@"%s::self.completed = %d\n", sel_getName(_cmd), self.completed); // trying to watch the values here, with no luck
NSLog(@"%s::fieldValue = %@\n", sel_getName(_cmd), fieldValue); // same here, I'd like to be able to view the `*value` here but so far no luck
return [self validateCurrentValue]; // currently this method just checks value.length > 5
}];
}
return self;
*value
参数已经绑定(bind)到我的 View 模型(成功),并且每次文本字段更改时它都会更新。
我正在寻找的是一个基本示例或最佳实践,上面的代码在运行时会崩溃,所以我知道我缺少一些基本的东西。
谢谢大家
最佳答案
-filter:
只是将来自 RACObserve(self, value)
的值原封不动地传递过去,但前提是该 block 返回 YES
。所以这意味着您正在尝试将 completed
设置为 value
类型的值。 That's Probably Bad®。
但好消息是你真的很接近!
您想要转换而不是过滤。您想要获取每个 value
并将其映射到其他事物。即该值是否通过验证。为此,我们使用 -map:
:
RAC(self, completed) = [RACObserve(self, value) map:^(NSString *fieldValue) {
return @([self validateCurrentValue]);
}];
关于ios - RACObserve(), RAC() - 如何根据 NSString 设置 BOOL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23696275/