zoukankan      html  css  js  c++  java
  • iOS开发ReactiveCocoa学习笔记(六)

    RAC操作方法三.

    demo地址:https://github.com/SummerHH/ReactiveCocoa.git 

    • doNext
    • deliverOn
    • timeout
    • interval
    • delay
    • retry
    • replay
    • throttle

    //ReactiveCocoa操作方法之秩序。

    - (void)doNext {
    
        //doNext: 执行Next之前,会先执行这个Block
        //doCompleted: 执行sendCompleted之前,会先执行这个Block
        [[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            [subscriber sendNext:@1];
            [subscriber sendCompleted];
            return nil;
        }] doNext:^(id x) {
            // 执行[subscriber sendNext:@1];之前会调用这个Block
            NSLog(@"doNext");
        }] doCompleted:^{
            // 执行[subscriber sendCompleted];之前会调用这个Block
            NSLog(@"doCompleted");
        }] subscribeNext:^(id x) {
            NSLog(@"%@",x);
    
        }];
    }

    //ReactiveCocoa操作方法之线程。

    - (void)deliverOn {
        //deliverOn: 内容传递切换到制定线程中,副作用在原来线程中,把在创建信号时block中的代码称之为副作用。
        
        //subscribeOn: 内容传递和副作用都会切换到制定线程中。
    }

    //ReactiveCocoa操作方法之时间。

    - (void)timeout {
        //timeout:超时,可以让一个信号在一定的时间后,自动报错。
        RACSignal *signal = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            return nil;
        }] timeout:1 onScheduler:[RACScheduler currentScheduler]];
        
        [signal subscribeNext:^(id x) {
            
            NSLog(@"%@",x);
    
        } error:^(NSError *error) {
            // 1秒后会自动调用
            NSLog(@"%@",error);
        }];
    }

    //interval 定时:每隔一段时间发出信号

    - (void)interval {
    
        [[RACSignal interval:1 onScheduler:[RACScheduler currentScheduler]] subscribeNext:^(id x) {
            NSLog(@"%@",x);
        } error:^(NSError *error) {
             NSLog(@"%@",error);
        }];
    }

    //delay 延迟发送next

    - (void)delay {
    
       [[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
          
            [subscriber sendNext:@1];
            return nil;
        }] delay:2] subscribeNext:^(id x) {
             NSLog(@"%@",x);
        }];
    }

    // ReactiveCocoa操作方法之重复。

    - (void)retry {
        //retry重试 :只要失败,就会重新执行创建信号中的block,直到成功.
        __block int i = 0;
        [[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            
            if (i == 10) {
                [subscriber sendNext:@1];
            }else{
                NSLog(@"接收到错误");
                [subscriber sendError:nil];
            }
            i++;
            return nil;
            
        }] retry] subscribeNext:^(id x) {
            
            NSLog(@"%@",x);
            
        } error:^(NSError *error) {
            
            
        }];
    }

    //replay重放:当一个信号被多次订阅,反复播放内容

    - (void)replay {
        RACSignal *signal = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            
            
            [subscriber sendNext:@1];
            [subscriber sendNext:@2];
            
            return nil;
        }] replay];
        
        [signal subscribeNext:^(id x) {
            
            NSLog(@"第一个订阅者%@",x);
            
        }];
        
        [signal subscribeNext:^(id x) {
            
            NSLog(@"第二个订阅者%@",x);
            
        }];
    }

    throttle

    - (void)throttle {
        RACSubject *signal = [RACSubject subject];
        _signal = signal;
        // 节流,在一定时间(1秒)内,不接收任何信号内容,过了这个时间(1秒)获取最后发送的信号内容发出。
        [[signal throttle:1] subscribeNext:^(id x) {
            NSLog(@"%@",x);
        }];
    }

    学习资料:

    最快让你上手ReactiveCocoa之基础篇: http://www.jianshu.com/p/87ef6720a096

    最快让你上手ReactiveCocoa之进阶篇: http://www.jianshu.com/p/e10e5ca413b

    RAC 基本操作命令 :https://segmentfault.com/a/1190000000408492

    MVVM+RAC 从框架到实战: http://www.jianshu.com/p/3beb21d5def2

    iOS ReactiveCocoa 最全常用API整理(可做为手册查询: http://www.jianshu.com/p/a4fefb434652

    ReactiveCocoa v2.5 源码解析 之 架构总览 : http://www.cocoachina.com/ios/20160105/14880.html

    RAC核心元素与信号流:http://www.jianshu.com/p/d262f2c55fbe

  • 相关阅读:
    开放6379端口
    synchronized 实现同步的基础
    pythoning—— 5:实战篇(购物车)
    pythoning ——3、数据类型(字符串)
    pythoning ——2、数据类型(元组、序列)
    pythoning ——1、基础篇
    暗链/黑链
    什么是webshell
    获取当前设备IP
    生成公钥
  • 原文地址:https://www.cnblogs.com/ningmengcao-ios/p/6804199.html
Copyright © 2011-2022 走看看