• RAC中常见的高级用法-过滤


    filter
         过滤信号,使用它可以获取满足条件的信号.
    - (void)filter
    {
        //只有当我们文本框内容长度大于5才想要获取文本框的内容
        [[_passWord.rac_textSignal filter:^BOOL(id value) {
            //value:源信号的内容
            return [value length] > 5;
            //返回值就是过滤的条件,只有满足这个条件才能获取到内容
        }] subscribeNext:^(id x) {
            NSLog(@"%@", x);
        }];
    }
     
    ignore:
          忽略完某些值的信号.
    - (void)ignore
    {
        //创建信号
        RACSubject *subject = [RACSubject subject];
        //ignore:忽略一些值
        //ignoreValues:忽略所有值
        RACSignal *ignoreSignal = [subject ignore:@"HMJ"];
    //    RACSignal *ignoreSignal = [subject ignoreValues];
        //订阅信号
        [ignoreSignal subscribeNext:^(id x) {
            NSLog(@"%@", x);
        }];
        //发送信号
        [subject sendNext:@"HMJ"];
        [subject sendNext:@"WGQ"];
    }
     
     
    distinctUntilChanged:
         当上一次的值和当前的值有明显的变化就会发出信号,否则会被忽略掉。
         在开发中,刷新UI经常使用,只有两次数据不一样才需要刷新
    - (void)distinctUntilChanged
    {
        //distinctUntilChanged:如果当前的值跟上一个值相同就不会被调用到
        //创建信号
        RACSubject *subject = [RACSubject subject];
        [[subject distinctUntilChanged] subscribeNext:^(id x) {
            NSLog(@"%@", x);
        }];
        [subject sendNext:@"HMJ"];
        [subject sendNext:@"HMJ"];
        [subject sendNext:@"HMJ"];
    }
     
    take:
         从开始一共取N次的信号
    - (void)take
    {
        //创建信号
        RACSubject *subject = [RACSubject subject];
        RACSubject *signal = [RACSubject subject];
        //take:取前面几个值
        //在没到第三个时就遇到[subject sendCompleted];那么就会停止发送信号
        [[subject take:3] subscribeNext:^(id x) {
            NSLog(@"%@", x);
        }];
        //takeLast:取后面多少个值,必须发送完成
        //只有[subject sendCompleted];才会发送信号
        [[subject takeLast:2] subscribeNext:^(id x) {
            NSLog(@"%@", x);
        }];
        //takeUntil:只要传入的信号发送完成或者signal发送信号,就不会再接收信号的内容
        [[subject takeUntil:signal] subscribeNext:^(id x) {
            NSLog(@"%@", x);
        }];
        //发送任意数据
        [subject sendNext:@1];
        [subject sendNext:@"HMJ"];
        [subject sendNext:@3];
        [subject sendCompleted];
        [subject sendNext:@4];
        [signal sendNext:@"signal"];
    }
     
    switchToLatest:
         用于signalOfSignals(信号的信号),有时候信号也会发出信号,会在signalOfSignals中,获取signalOfSignals发送的最新信号
    - (void)switchToLatest
    {
        RACSubject *signalOfSignal = [RACSubject subject];
        RACSubject *signal = [RACSubject subject];
        // 获取信号中信号最近发出信号,订阅最近发出的信号。
        // 注意switchToLatest:只能用于信号中的信号
        //订阅信号
        [signalOfSignal.switchToLatest subscribeNext:^(id x) {
            NSLog(@"%@", x);
        }];
        //发送信号
        [signalOfSignal sendNext:signal];
        [signal sendNext:@"signal"];
    }
     
    skip
    跳过几个信号,不接受
    - (void)skip
    {
        //skip:跳跃几个值再接收被订阅
        //创建信号
        RACSubject *subject = [RACSubject subject];
        [[subject skip:2] subscribeNext:^(id x) {
            NSLog(@"%@", x);
        }];
        [subject sendNext:@"HMJ"];
        [subject sendNext:@"1"];
        [subject sendNext:@"3"];
    }
  • 相关阅读:
    指针与数组
    深入函数
    到底是使用指针还是引用 ,混合使用以及易错点
    返回值作为标志
    c++的引用(二)
    内联函数
    c++的引用
    指针总结以及常量指针与指向常量的指针与指向常量的常指针
    c++中的 堆和栈
    Java Messages Synchronous and Asynchronous
  • 原文地址:https://www.cnblogs.com/HMJ-29/p/4944001.html
Copyright © 2020-2023  润新知