美文网首页
RACCommand

RACCommand

作者: frankisbaby | 来源:发表于2018-09-18 10:41 被阅读19次

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

    使用场景:监听按钮点击事件,网络请求;

    使用步骤:

    1.创建命令:

    RACCommand不能返回一个空的信号:

    RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id  _Nullable input) {

            //input为执行命令时传递的参数

            NSLog(@"%@",input);

            return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {

                //执行完命令后,在这里发送数据

                [subscriber sendNext:@"拿到网络数据"];

                returnnil;

            }];

        }];

    2.执行命令:

    RACSignal *signal = [command execute:@100];

    如何拿到执行命令产生的数据呢?需要订阅命令内部的信号

    3.订阅信号

    方法有三种:

    1利用执行命令返回的信号进行订阅:

    [signal subscribeNext:^(id  _Nullablex) {

            NSLog(@"%@",x);

        }];

    注意:这种方式可以在执行之后订阅;

    2.executionSignals为命令的信号源(信号中的信号),我们订阅它会返回命令中返回的信号:

    [command.executionSignals subscribeNext:^(id  _Nullable x) {

            RACSignal*signal = x;

            [signalsubscribeNext:^(id  _Nullabledata) {

                NSLog(@"%@",data);

            }];

        }];

    注意:这种方式必须在执行之前订阅;

    3.switchToLatest获取最新发送的信号,只能用于信号中的信号

    [command.executionSignals.switchToLatest subscribeNext:^(id  _Nullable x) {

            NSLog(@"%@",x);

        }];

    4.executing

    [command.executing subscribeNext:^(NSNumber * _Nullable x) {

            if([x boolValue]) {//当前正在执行

                NSLog(@"当前正在执行");

            }else{

                NSLog(@"执行完成或没有执行");

            }

        }];

    executing可以监控命令的执行,block返回值是一个NSNumber类型的布尔值,YES代表正在执行,NO代表执行完成或没有执行,在一执行subscribeNext就会执行没有执行的代码,[subscriber sendCompleted];执行完成之后会调用执行完成的代码;

    相关文章

      网友评论

          本文标题:RACCommand

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