函数式编程思想的侵袭–ReactiveCocoa的信号和订阅机制备忘
RAC中的信号会有三种值: next error 和 complete. 当一个信号在发送了error和complete之后就不会在发送任何信号值了。可以理解为这个信号就死了。
RAC中对UIKit的大多UI控件都做了一层信号值的处理方式,比如我们最常见的UIButton和UITextField.
当你随时都想知道某一个值的改变时(不管是next、error或者completion),你就会订阅流—一种最常见的signal.使用信号通常都会有副作用.
UITextField的订阅用户输入:
[self.textField.rac_textSignal subscribeNext:^(id x){
NSLog(@"New Value: %@", x);
}];
RACSignal * validEmailSignal = [self.textField.rac_textSignal map:^id (NSString *value){
return @([value rangeOfString:@"@"].location != NSNotFound);
}];
// 状态绑定
RAC(self.button, enabled) = validEmailSignal;
RAC(self.textField, textColor) = [validEmailSignal map: ^id (id value){
if([value boolValue]){
return [UIColor greenColor];
}else{
return [UIColor redColor];
}
}];