• RACCommand中的信号


    示例:

     RACSignal* textSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            [subscriber sendNext:@(1)];
            [subscriber sendNext:@(2)];
            [subscriber sendError:[NSError new]];
            return nil;
        }];
        
        RACCommand* textCommad = [[RACCommand alloc]initWithSignalBlock:^RACSignal *(id input) {
            return textSignal;
        }];
        
        self.createButton.rac_command = textCommad;
        
        [textCommad.executing subscribeNext:^(id x) {
            NSLog(@"executing%@",x);
        }];
        
        [textCommad.executionSignals subscribeNext:^(id x) {
            NSLog(@"executionSignals%@",x);
        }];
        
        [[textCommad.executionSignals switchToLatest]subscribeNext:^(id x) {
            NSLog(@"executionSignals switchLatest%@",x);
        }];
        
        [textCommad.errors subscribeNext:^(id x) {
            NSLog(@"errors");
        }];

    输出:

    2015-08-09 22:17:27.610 ReactiveCocoaDemo[7181:141024] executing0

    2015-08-09 22:17:30.325 ReactiveCocoaDemo[7181:141024] executing1

    2015-08-09 22:17:30.325 ReactiveCocoaDemo[7181:141024] executionSignals<RACDynamicSignal: 0x7f89b3c6ca20> name: 

    2015-08-09 22:17:30.326 ReactiveCocoaDemo[7181:141024] executionSignals switchLatest1

    2015-08-09 22:17:30.326 ReactiveCocoaDemo[7181:141024] executionSignals switchLatest2

    2015-08-09 22:17:30.327 ReactiveCocoaDemo[7181:141024] errors

    2015-08-09 22:17:30.327 ReactiveCocoaDemo[7181:141024] executing0

    结论:

    1.executing信号一绑定就会sendNext:@(NO);如果想忽略第一次的Next,使用[executing skip:1]

    2.按钮点击事件发生时,首先exectuing会sendNext:@(YES);然后executionSignals会sendNext一个RACSignal对象,该对象就是RACCommand创建时传入的block的返回值,。 改正:该RACSignal对象与RACCommand创建时传入的block的返回值不是同一个对象,但是他们两个会sendNext相同的值。

    3.注意executionSignals是信号的信号,即它的值类型为RACSignal,而我们一般希望捕获的是RACSignal所携带的值,因此可以使用switchToLatest或flatten的方法来做到;也可以直接对该RACSignal进行订阅。

    4.errors包含了RACComand执行过程产生的所有错误。

    5.等到RACCommand中的Signal都完毕了(complete或error),exectuting会sendNext:@(NO).

  • 相关阅读:
    PHP json_decode()解析失败 返回NULL 错误是4
    PHP 合并两个二维数组 array_map 和 array_walk 的区别
    PHP二维数组指定字段进行排序
    常用正则汇总
    PHP中json_encode()使用须知,JSON数组和JSON对象
    PHPExcel大文件块级别读取 速度快 减少占用资源
    移动端border-radius失效
    JavaScript滑动页面到顶部
    软键盘把底部div顶上去
    JavaScript滚动div
  • 原文地址:https://www.cnblogs.com/guoxiaoqian/p/4716540.html
Copyright © 2020-2023  润新知