使用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 

在最后一行,我遇到两个错误: –

  1. ARC不允许将’BOOL’(又名’signed char’)隐式转换为’id’
  2. 预期的标识符

我是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宏至少使用两个参数,即绑定的对象和键路径。