//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