//subscribeNext:传递给下一个执行 [self.usernameTF.rac_textSignal subscribeNext:^(id x) { NSLog(@"%@",x); }]; //filter:过滤信号 [[self.usernameTF.rac_textSignal filter:^BOOL(NSString *name) { return name.length > 3; }] subscribeNext:^(id x) { NSLog(@"%@",x); }]; //map:转换信号的类型 [[self.passwordTF.rac_textSignal map:^id(NSString *password) { return @(password.length); }] subscribeNext:^(id x) { NSLog(@"%@",x); }]; //创建一个信号 RACSignal *nameSignal = [self.usernameTF.rac_textSignal map:^id(NSString *name) { return @(name.length > 3); }]; RACSignal *passwordSignal = [self.passwordTF.rac_textSignal map:^id(NSString *password) { return @(password.length > 4); }]; //利用上一步所得的信号再进行条件判断 //当不使用subscribeNext时上面的信号不会执行; [[nameSignal map:^id(NSNumber *nameValue) { return [nameValue boolValue] ? [UIColor clearColor] : [UIColor greenColor]; }] subscribeNext:^(UIColor *color) { self.usernameTF.backgroundColor = color; }]; [[passwordSignal map:^id(NSNumber *passWordValue) { return [passWordValue boolValue] ? [UIColor clearColor] : [UIColor greenColor]; }] subscribeNext:^(UIColor *color) { self.passwordTF.backgroundColor = color; }]; //RAC 宏允许您指定一个信号的输出对象的属性。 它需要两个参数,第一个是包含属性设置的对象,第二个是属性名。 每次信号发出下一个事件,是分配给给定属性的值。 //下面这段代码与上面的作用相同 RAC(self.usernameTF,backgroundColor) = [nameSignal map:^id(NSNumber *nameValue) { return [nameValue boolValue] ? [UIColor clearColor] : [UIColor greenColor]; }]; RAC(self.passwordTF,backgroundColor) = [passwordSignal map:^id(NSNumber *passWordValue) { return [passWordValue boolValue] ? [UIColor clearColor] : [UIColor greenColor]; }]; //结合信号 RACSignal *siginSignal = [RACSignal combineLatest:@[nameSignal, passwordSignal] reduce:^id(NSNumber *nameValue, NSNumber *passWordValue){ return @([nameValue boolValue] && [passWordValue boolValue]); }]; [siginSignal subscribeNext:^(NSNumber *siginValue) { self.siginBtn.enabled = [siginValue boolValue]; }]; [[self.siginBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) { NSLog(@"按钮被点击了"); }];
ReactiveCocoa-基础,布布扣,bubuko.com
原文:http://blog.csdn.net/fucheng56/article/details/21445525