美文网首页
[iOS][RAC]--RACCommand命令

[iOS][RAC]--RACCommand命令

作者: 阿不不不不 | 来源:发表于2018-11-05 15:13 被阅读22次
RACCommand作用:

RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,他可以很方便的监控事件的执行过程。

RACCommand使用场景:监听按钮点击,网络请求
简单实用实例
 //1:创建命令 注意:command创建的block块返回值不能是nil
  RACCommand *command = [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id  _Nullable input) {
        
      return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
          //发送数据
          [subscriber sendNext:@"执行完命令之后产生的数据"];
          return nil;
      }];
    }];
    //2:执行命令
   RACSignal *signal = [command execute:@"输入指令"];
    //3:订阅信号
    [signal subscribeNext:^(id  _Nullable x) {
        NSLog(@"%@",x);
    }];
通过executionSignals先订阅信号再执行命令
//command里面的信号可以被command的信号源所发送,即command.executionSignals的信号就是返回回来的信号,因为信号signal是一个对象,对象就可以通过数据的形式进行传输
//1.创建命令
    RACCommand * command = [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id  _Nullable input) {
        NSLog(@"%@",input);
        //input:指令
        return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            
            //发送数据
            [subscriber sendNext:@"执行完命令之后产生的数据"];
            
            return nil;
        }];
    }];
    
    //订阅信号
    //executionSignals:信号源!!,发送信号的信号!
        [command.executionSignals subscribeNext:^(RACSignal * x) {
            [x subscribeNext:^(id  _Nullable x) {
                NSLog(@"%@",x);
            }];
            NSLog(@"%@",x);
        }];
    //2.执行命令
    [command execute:@"输入的指令!!"];
Snip20181105_16.png
监听事件有没有执行完毕
//RACCommand命令
    //1.创建命令
    RACCommand * command = [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id  _Nullable input) {
        NSLog(@"%@",input);
        //input:指令
        return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            
            //发送数据
            [subscriber sendNext:@"执行完命令之后产生的数据"];

            //发送完成
            [subscriber sendCompleted];
            
            return nil;
        }];
    }];
    //监听事件有没有执行完毕command.executing也是一个信号,这里也执行了信号的订阅
    [command.executing subscribeNext:^(NSNumber * _Nullable x) {
        if([x boolValue]){ //正在执行!!
            NSLog(@"正在执行!!");
        }else{
            NSLog(@"已经结束咯&&还没开始做!");
        }
    }];
    
    
    RACSignal * signal =  [command execute:@"执行!!"];
    [signal subscribeNext:^(id  _Nullable x) {
        NSLog(@"接受到数据了!!%@",x);
    }];
    
注意:必须加上[subscriber sendCompleted]发送完成,
Snip20181105_17.png Snip20181105_19.png
switchToLatest属性
//创建多个信号
    RACSubject * signalOfSignal = [RACSubject subject];
    RACSubject * signal1 = [RACSubject subject];
    RACSubject * signal2 = [RACSubject subject];
    RACSubject * signal3 = [RACSubject subject];
    
    //switchToLatest :最新的信号!!
    [signalOfSignal.switchToLatest subscribeNext:^(id  _Nullable x) {
        NSLog(@"%@",x);
    }];
    //发送信号
    [signalOfSignal sendNext:signal1];
    [signalOfSignal sendNext:signal2];
    [signalOfSignal sendNext:signal3];
    //发送数据
    [signal3 sendNext:@"3"];
    [signal2 sendNext:@"2"];
    [signal1 sendNext:@"1"];
Snip20181105_20.png

相关文章

  • [iOS][RAC]--RACCommand命令

    RACCommand作用: RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,他...

  • iOS RAC - RACCommand

    文章系列《RACSignal 》《RACDisposable》《RACSubject、RACReplaySubje...

  • (七)、iOS RAC - RACCommand

    RACCommand 是 RAC 中的最复杂的一个类之一,它也是一种广义上的信号,RAC 中信号其实是一种对象(或...

  • RACCommand与RACSubject的比较

    看了这位哥们关于rac的文章,有所启发然后上代码: RACCommand 是什么 1. 定义 RACCommand...

  • RAC学习笔记1·

    RAC支持的UI控件 RACCommand RACCommand类用于表示事件的执行,一般来说是在UI上的某些动作...

  • iOS RAC基础用法、RACCommand、RACTuple、

    前面我们说了信号的创建以及它内部实现的一个逻辑。这篇文章开始说一下RAC的场景用法。 Button 监听方法 按照...

  • iOS RAC学习之路2之RACCommand

    上一篇我们已经对RACSignal的大部分用法都概括了一遍,我们把它理解为一个信号,可以比较清晰的在脑海里想象出来...

  • iOS开发RAC学习笔记(三)RACCommand

    github源代码地址 RACCommand RACCommand的普通使用 一般情况下,RACCommand主要...

  • 06RAC--RACCommand

    RACCommand:RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,他可以很...

  • RAC笔记(2)-- RACCommand

    创建RACCommand initWithSignalBlock保存了:_signalBlock_executio...

网友评论

      本文标题:[iOS][RAC]--RACCommand命令

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