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]);    
}];

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...