ReactiveCocoa的常见用法和常用宏

前端之家收集整理的这篇文章主要介绍了ReactiveCocoa的常见用法和常用宏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文


常见用法


  1. // 1.代替代理
  2. // 需求:自定义redView,监听红色view中按钮点击
  3. // 之前都是需要通过代理监听,给红色View添加一个代理属性,点击按钮的时候,通知代理做事情
  4. // rac_signalForSelector:把调用某个对象的方法的信息转换成信号,就要调用这个方法,就会发送信号。
  5. // 这里表示只要redV调用btnClick:,就会发出信号,订阅就好了。
  6. [[redV rac_signalForSelector:@selector(btnClick:)] subscribeNext:^(id x) {
  7. NSLog(@"点击红色按钮");
  8. }];
  9.  
  10. // 2.KVO
  11. // 把监听redV的center属性改变转换成信号,只要值改变就会发送信号
  12. // observer:可以传入nil
  13. [[redV rac_valuesAndChangesForKeyPath:@"center" options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(id x) {
  14.  
  15. NSLog(@"%@",x);
  16.  
  17. }];
  18.  
  19. // 3.监听事件
  20. // 把按钮点击事件转换为信号,点击按钮,就会发送信号
  21. [[self.btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
  22.  
  23. NSLog(@"按钮被点击了");
  24. }];
  25.  
  26. // 4.代替通知
  27. // 把监听到的通知转换信号
  28. [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(id x) {
  29. NSLog(@"键盘弹出");
  30. }];
  31.  
  32. // 5.监听文本框的文字改变
  33. [_textField.rac_textSignal subscribeNext:^(id x) {
  34.  
  35. NSLog(@"文字改变了%@",x);
  36. }];
  37.  
  38. // 6.处理多个请求,都返回结果的时候,统一做处理.
  39. RACSignal *request1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
  40.  
  41. // 发送请求1
  42. [subscriber sendNext:@"发送请求1"];
  43. return nil;
  44. }];
  45.  
  46. RACSignal *request2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
  47. // 发送请求2
  48. [subscriber sendNext:@"发送请求2"];
  49. return nil;
  50. }];
  51.  
  52. // 使用注意:几个信号,参数一的方法就几个参数,每个参数对应信号发出的数据。
  53. [self rac_liftSelector:@selector(updateUIWithR1:r2:) withSignalsFromArray:@[request1,request2]];
  54.  
  55.  
  56. }
  57. // 更新UI
  58. - (void)updateUIWithR1:(id)data r2:(id)data1
  59. {
  60. NSLog(@"更新UI%@ %@",data,data1);
  61. }



常用宏


  1. RAC(TARGET,[KEYPATH,[NIL_VALUE]]):用于给某个对象的某个属性绑定。
  1. // 只要文本框文字改变,就会修改label的文字
  2. RAC(self.labelView,text) = _textField.rac_textSignal;


  1. RACObserve(self,name):监听某个对象的某个属性,返回的是信号。
  1. [RACObserve(self.view,center) subscribeNext:^(id x) {
  2.  
  3. NSLog(@"%@",x);
  4. }];

猜你在找的React相关文章