美文网首页
RAC的常见应用场景

RAC的常见应用场景

作者: 锦鲤跃龙 | 来源:发表于2017-12-21 15:52 被阅读0次

这里写RAC常见的应用场景

  1. RAC集合
  2. 代替KVO
  3. 监听事件
  4. 代替通知
  5. 监听文本框
    5.代理

RAC集合

RACTuple

RACTuple是rac定义的集合,跟数组类似,

    RACTuple *tuple = [RACTuple tupleWithObjectsFromArray:@[@"aaaa",@"bb",@123,@23434]];
    
    NSString *str = tuple[0];
    NSLog(@"%@",str);

RAC解析数据

  1. RACSequence 用于代替NSArray,NSDictionary 可以使用快速遍历
  2. 数据解析 最常见的应用场景:字典转模型

解析数组

    //数组
    NSArray *arr = @[@"abc",@"bbb",@123];
    
    //RAC集合 将数组中的元素作为发送信号的内容
 
    [arr.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
        NSLog(@"%@",x);
    }];

解析字典

//字典
    NSDictionary *dict = @{@"name":@"LYJ",@"age":@"18"};
    
    //字典转为集合
    [dict.rac_sequence.signal subscribeNext:^(RACTuple * x){
        
        //NSLog(@"%@",x);
        /*
         NSString *key = x[0];//返回的第一个是key
         NSString *value = x[1];返回的值是value
         
         NSLog(@"key = %@,value = %@",key,value);
         */
        //解析元祖: RACTupleUnpack(<#...#>)定义的一个宏
        RACTupleUnpack(NSString * key,NSString * value) = x;
        NSLog(@"%@ : %@",key,value);
        
    }];

代替kvo

[_redView rac_observeKeyPath:@"frame" options:NSKeyValueObservingOptionOld observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {
     //回调
     //监听到的时候,做出的改变!
     NSLog(@"value==%@-%@",value,change);

     }];

3 监听事件

   [[_btn rac_signalForControlEvents:(UIControlEventTouchUpInside)]subscribeNext:^(__kindof UIControl * _Nullable x) {
        
        NSLog(@"按钮被点击");
        
        
    }];
    

4 代替通知

#import "NSObject+RACKVOWrapper.h"
    [[[NSNotificationCenter defaultCenter]rac_addObserverForName:UIKeyboardWillShowNotification object:nil]subscribeNext:^(NSNotification * _Nullable x) {
        
        NSLog(@"键盘调取!");
        
    }];

5 监听文本框

    [_textField.rac_textSignal subscribeNext:^(NSString * _Nullable x) {
        
        NSLog(@"%@",x);
        
        
    }];

6.代替代理

//这里订阅收到的是一个x,当一个页面存在多个tableview时,我们可以对x进行判断看是哪个tableview
  [[self rac_signalForSelector:@selector(tableView:didSelectRowAtIndexPath:) fromProtocol:@protocol(UITableViewDelegate) ] subscribeNext:^(RACTuple * x) {

      NSLog(@"点击了");

      NSLog(@"%@,%@",x.first,x.second);

  }];

  //这样子不带协议是无法代替代理的,虽然能达到效果,这个方法表示某个selector被调用时执行一段代码.带有协议参数的表示该selector实现了某个协议,所以可以用它来实现Delegate。
  //    [[self rac_signalForSelector:@selector(tableView:didSelectRowAtIndexPath:)] subscribeNext:^(RACTuple* x) {
          
  //        NSLog(@"%@",[x class]);

  //        NSLog(@"%@",x);
  //    }];

  //这里是个坑,必须将代理最后设置,否则信号是无法订阅到的
  //在设置代理的时候,系统会缓存这个代理对象实现了哪些代码方法
  //如果将代理放在订阅信号前设置,那么当控制器成为代理时是无法缓存这个代理对象实现了哪些代码方法的
  tableview.delegate = self;

相关文章

  • RAC的常见应用场景

    这里写RAC常见的应用场景 RAC集合 代替KVO 监听事件 代替通知 监听文本框5.代理 RAC集合 RACTu...

  • RAC常见应用场景

    代替代理 1.自定义一个View控件,并添加一个按钮 2.如果使用代理,需要创建一个delegate属性,在cli...

  • RAC常见的六种应用场景

    RAC中用常见的六种应用场景,作为入门阶段的学习,有必要了解一下。1.代替代理 主要通过RACSubject...

  • RAC-应用场景(一)

    一、导图 二、具体实现 具体代码:https://github.com/lionsom/LXReactiveCoc...

  • RAC-应用场景(二)

    一、导图 二、具体实现 代码地址:https://github.com/lionsom/LXReactiveCoc...

  • RAC - 利用combineLatest 与 map 函数将输

    RAC - 利用combineLatest 与 map 函数将输入信号合并判断登录按钮是否有效 应用场景:需要综合...

  • RAC一些常见用法(五)

    本demo详见github 1.常见的用法 2.RAC常见的宏 3.发送验证码 友情链接: RAC(一) RAC(...

  • RAC学习之一

    废话不多说,直接讲实际应用 RAC的使用场景在addTarget、代理、通知、KVO、代替NSTimer、网络异步...

  • 记录ReactiveObjC的一些用法

    常见用法 rac_signalForSelector : 代替代理 rac_valuesAndChangesFor...

  • RAC(二)

    本demo详见github 下面我们来看看RAC的常见的类的使用 1.RAC常见类-RACSiganl RACSi...

网友评论

      本文标题:RAC的常见应用场景

      本文链接:https://www.haomeiwen.com/subject/ftjawxtx.html