使用Reactive Cocoa RACSignal启用UIButton
我在视图中添加了一个UIButton
。 我的观点还有三个文本框即。 用户名 , 密码和confirmPassword 。 根据这些文本框的合法内容,我需要启用我的signUp按钮。
这是我的代码片段: –
UIButton *signUp = [[UIButton alloc]initWithFrame:CGRectMake(10, 100, 50, 20)]; signUp.backgroundColor = [UIColor greenColor]; signUp.enabled = NO ; [self.view addSubview:signUp]; RACSignal *formValid = [RACSignal combineLatest:@[ username.rac_textSignal, password.rac_textSignal, confirmPassword.rac_textSignal ] reduce:^(NSString *username, NSString *password, NSString *passwordVerification) { return @([username length] > 0 && [password length] > 8 && [password isEqual:passwordVerification]); }]; RAC(signUp.enabled) = formValid; //Error is here
在最后一行,我遇到两个错误: –
- ARC不允许将’BOOL’(又名’signed char’)隐式转换为’id’
- 预期的标识符
我是Reactive Cocoa的新手。 请忽略错误。
RAC()
宏至少接受两个参数,即目标对象和该对象上的有效键路径。
像这样:
RAC(signUp, enabled) = formValid;
你传递的是signUp.enabled
,这是一个单项,碰巧是BOOL
,而不是对象。 扩展宏之后, BOOL
被传递给期望对象参数的方法,因此编译器会抱怨:
[[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:signUp.enabled nilValue:<#garbage#>][@keypath(signUp.enabled, nil)]
使用RAC(signUp, enabled)
代替RAC(signUp.enabled)
。 RAC
宏至少使用两个参数,即绑定的对象和键路径。