ReactiveCocoa-基础

来源:互联网 发布:手游推广联盟源码 编辑:程序博客网 时间:2024/05/29 11:33
  1. //subscribeNext:传递给下一个执行  
  2.  [self.usernameTF.rac_textSignal subscribeNext:^(id x) {  
  3.      NSLog(@"%@",x);  
  4.  }];  
  5.    
  6.  //filter:过滤信号  
  7.  [[self.usernameTF.rac_textSignal filter:^BOOL(NSString *name) {  
  8.      return name.length > 3;  
  9.  }] subscribeNext:^(id x) {  
  10.      NSLog(@"%@",x);  
  11.  }];  
  12.    
  13.  //map:转换信号的类型  
  14.  [[self.passwordTF.rac_textSignal map:^id(NSString *password) {  
  15.      return @(password.length);  
  16.  }] subscribeNext:^(id x) {  
  17.      NSLog(@"%@",x);  
  18.  }];  
  19.    
  20.    
  21.  //创建一个信号  
  22.  RACSignal *nameSignal = [self.usernameTF.rac_textSignal map:^id(NSString *name) {  
  23.      return @(name.length > 3);  
  24.  }];  
  25.    
  26.  RACSignal *passwordSignal = [self.passwordTF.rac_textSignal map:^id(NSString *password) {  
  27.      return @(password.length > 4);  
  28.  }];  
  29.    
  30.  //利用上一步所得的信号再进行条件判断  
  31.  //当不使用subscribeNext时上面的信号不会执行;  
  32.  [[nameSignal map:^id(NSNumber *nameValue) {  
  33.      return [nameValue boolValue] ? [UIColor clearColor] : [UIColor greenColor];  
  34.  }] subscribeNext:^(UIColor *color) {  
  35.      self.usernameTF.backgroundColor = color;  
  36.  }];  
  37.    
  38.  [[passwordSignal map:^id(NSNumber *passWordValue) {  
  39.      return [passWordValue boolValue] ? [UIColor clearColor] : [UIColor greenColor];  
  40.  }] subscribeNext:^(UIColor *color) {  
  41.      self.passwordTF.backgroundColor = color;  
  42.  }];  
  43.    
  44.  //RAC 宏允许您指定一个信号的输出对象的属性。 它需要两个参数,第一个是包含属性设置的对象,第二个是属性名。 每次信号发出下一个事件,是分配给给定属性的值。  
  45.  //下面这段代码与上面的作用相同  
  46.  RAC(self.usernameTF,backgroundColor) = [nameSignal map:^id(NSNumber *nameValue) {  
  47.      return [nameValue boolValue] ? [UIColor clearColor] : [UIColor greenColor];  
  48.  }];  
  49.    
  50.  RAC(self.passwordTF,backgroundColor) = [passwordSignal map:^id(NSNumber *passWordValue) {  
  51.      return [passWordValue boolValue] ? [UIColor clearColor] : [UIColor greenColor];  
  52.  }];  
  53.    
  54.  //结合信号  
  55.  RACSignal *siginSignal = [RACSignal combineLatest:@[nameSignal, passwordSignal] reduce:^id(NSNumber *nameValue, NSNumber *passWordValue){  
  56.      return @([nameValue boolValue] && [passWordValue boolValue]);  
  57.  }];  
  58.    
  59.  [siginSignal subscribeNext:^(NSNumber *siginValue) {  
  60.      self.siginBtn.enabled = [siginValue boolValue];  
  61.  }];  
  62.    
  63.  [[self.siginBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {  
  64.      NSLog(@"按钮被点击了");  
  65.  }];  
  66.    
0 0
原创粉丝点击