ReactiveCocoa学习笔记--用法

1、监测UI变量的变化

return 后把值传递下去。

1.1、输出

[self.usernameTextField.rac_textSignal subscribeNext:^(id x){
  NSLog(@"%@", x);
}];

 1.2、过滤->输出

[[self.usernameTextField.rac_textSignal
  filter:^BOOL(NSString*text){
    return text.length > 3;
  }]
  subscribeNext:^(id x){
    NSLog(@"%@", x);
  }];

 1.3、改变数据类型->过滤->输出

[[[self.usernameTextField.rac_textSignal
  map:^id(NSString*text){
    return @(text.length);
  }]
  filter:^BOOL(NSNumber*length){
    return[length integerValue] > 3;
  }]
  subscribeNext:^(id x){
    NSLog(@"%@", x);
  }];

 1.4、subscribeNext的另一种写法

RAC宏允许直接把信号的输出应用到对象的属性上。RAC宏有两个参数,第一个是需要设置属性值的对象,第二个是属性名。每次信号产生一个next事件,传递过来的值都会应用到该属性上

RAC(self.passwordTextField, backgroundColor) =
  [validPasswordSignal
    map:^id(NSNumber *passwordValid){
      return[passwordValid boolValue] ? [UIColor clearColor]:[UIColor yellowColor];
    }];

 2.常用用法

RAC(self.outputLabel, text) = RACObserve(self.model, name);

3.特殊技巧

3.1切换到主线程

deliverOn:[RACScheduler mainThreadScheduler]]  

3.2 重置cell内容

takeUntil:cell.rac_prepareForReuseSignal

3.3 一段时间内没有新信号再往下执行

throttle:0.5

3.4状态改变时发出信号

distinctUntilChanged

3.4空信号

- (RACSignal *)executeSearchSignal
{
    return [[[[RACSignal empty] logAll] delay:2.0] logAll];
}

空信号会立即完成。delay操作会将其所接收到的next或complete事件延迟两秒执行。

3.4反转信号

not操作来反转信号
例如:[signal.executing not];

3.4 executionSignals属性(是一个信号)

发送由命令每次执行时生成的信号,创建和发出一个新的命令执行信号执行。


原文地址:https://www.cnblogs.com/SimonGao/p/4683091.html