微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – RACObserve(),RAC() – 如何基于NSString设置BOOL值

作为Reactive Cocoa的新手,我希望对此提出一些建议:

我正在尝试创建一个动态表单,其中包含从XML文件解析的多个Field对象.每个Field都可以有多个验证规则,这些规则将针对Field的Nsstring *值参数运行.

对于RAC部分问题 –

在每个Field对象中,我想将BOOL完成绑定到一个信号,该信号根据规则数组检查Field的*值参数.到目前为止,我已经考虑到了这一点:

@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",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 param已经绑定到我的视图模型(成功),并且每次文本字段更改时都会更新.

我正在寻找的是一个基本的例子或最佳实践,上面的代码在运行时崩溃所以我知道我缺少一些基本的东西.

谢谢大家

解决方法

-filter:只是将RACObserve(self,value)中的值传递给未更改的,但前提是该块返回YES.这意味着您正在尝试将完成设置为任何类型值的值.那可能是坏事.

但好消息是你真的很亲密!

您想要转换,而不是过滤.您想要获取每个值并将其映射到其他东西.即该值是否通过验证.为此,我们使用-map ::

RAC(self,value) map:^(Nsstring *fieldValue) {
    return @([self validateCurrentValue]);    
}];

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐