zoukankan      html  css  js  c++  java
  • 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"];
    }
  • 相关阅读:
    黑产及社会工程学-学习历程
    ACE_Get_Opt函数笔记
    PlatformIO+Jlink进行调试
    Mac下搭建基于PlatformIO的嵌入式开发环境(STM32开发)
    选择排序
    插入排序
    JPEG原理详解 (转载)
    双链表基本操作
    单链表基本操作
    顺序表基本操作
  • 原文地址:https://www.cnblogs.com/HMJ-29/p/4944001.html
Copyright © 2011-2022 走看看