RAC使用(一)——关键字

栏目: 数据库 · 发布时间: 4年前

内容简介:这篇总结一下RAC平时常用的几个关键字(方法)。RAC可以理解为对数据流的处理。创建一个信号,用来发送一个字符串:“发送第一个信号”,一个signal可以理解为一个管道。创建信号2 signalTwo,发送三个信号。

这篇总结一下RAC平时常用的几个关键字(方法)。RAC可以理解为对数据流的处理。

创建信号-可理解为处理数据流的管道

创建一个信号,用来发送一个字符串:“发送第一个信号”,一个signal可以理解为一个管道。

RACSignal *signalOne = [RACSignal
                            createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
                                
                                //发送信号
                                [subscriber sendNext:@"发送第一个信号"];
                                [subscriber sendCompleted];
                                
                                return [RACDisposable disposableWithBlock:^{
                                    
                                }];
                            }];
复制代码

创建信号2 signalTwo,发送三个信号。

RACSignal *signalTwo = [RACSignal
                            createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
                                
                                //发送信号
                                [subscriber sendNext:@"发送第二个信号1"];
                                [subscriber sendNext:@"发送第二个信号2"];
                                [subscriber sendNext:@"发送第二个信号3"];
                                
                                [subscriber sendCompleted];
                                
                                return [RACDisposable disposableWithBlock:^{
                                    
                                }];
                            }];
复制代码

flattenMap

通过flattenMap,又会生成一个新信号。里面可以对数据进行处理。此处,我是将信号1的字符串截3个。即通过flattenMap,流进管道里面的数据流,转换成一个新的数据流。

signalOne = [signalOne flattenMap:^RACStream *(id value) {

        if (![value isKindOfClass:[NSString class]]) {
            return [RACSignal return:[NSError new]];
        }
        
        NSString *valueStr = (NSString *)value;
        if (valueStr.length >= 3) {
            return [RACSignal return:[valueStr substringToIndex:3]];
        }
        return [RACSignal return:valueStr];
    }];
    
    [signalOne subscribeNext:^(id x) {
        NSLog(@"===%@", x);
    }];
复制代码

map

与flattenMap不同,这里也可以做数据操作,但是不会返回新的信号量,而是直接对数据操作。

[[signalOne map:^id(id value) {
        
        if (![value isKindOfClass:[NSString class]]) {
            return value;
        }
        
        NSString *valueStr = (NSString *)value;
        if (valueStr.length >= 3) {
            return [valueStr substringToIndex:3];
        }
        return valueStr;
    }] subscribeNext:^(id x) {
        NSLog(@"===%@", x);
    }];
复制代码

filter

信号2发送的三个字符串,只有为“发送第二个信号2”时, 才会发送。可用来判断文本框输入长度。

[[signalTwo filter:^BOOL(id value) {
        
        //此处return Yes才走subscribeNext。
        if ([value isEqualToString:@"发送第二个信号2"]) {
            return YES;
        }else
        {
            return NO;
        }
    }]subscribeNext:^(id x) {
        
        NSLog(@"%@",x);
    }];
复制代码

take

take后的数字,表示发送前几个信号。这里只发送信号2的前两个信号。

[[signalTwo
      take:2]
     subscribeNext:^(id x) {
         NSLog(@"%@",x);
     }];
复制代码

takeLast

takeLast,表示发送最后的几个信号。这里只发送信号2的最后两个信号。

[[signalTwo
      takeLast:2]
     subscribeNext:^(id x) {
         NSLog(@"%@",x);
     }];
复制代码

ignore

ignore后面跟的是值。这里表示,信号2的“发送第二个信号2”不被发送。

[[signalTwo
      ignore:@"发送第二个信号2"]
     subscribeNext:^(id x) {
         NSLog(@"%@",x);
     }];
复制代码

最后

这是几个比较简单的方法,还有merge,rac_sequence等~写的不对的,请大佬多多指教~ 文章里几个例子没有写结果,感兴趣的同学可以自己试一下~祝大家玩得开心


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

超简单!一学就懂的互联网金融

超简单!一学就懂的互联网金融

视觉图文 / 人民邮电出版社 / 2015-2-1 / 45.00元

零基础、全图解,通过130多个精辟的知识点、220多张通俗易懂的逻辑图表,让您一书在手,即可彻底看懂、玩转互联网金融从菜鸟成为达人,从新手成为互联网金融高手! 本书主要特色:最简洁的版式+最直观的图解+最实用的内容。 本书细节特色:10章专题内容详解+80多个特别提醒奉献+130多个知识点讲解+220多张图片全程图解,深度剖析互联网金融的精华之处,帮助读者在最短的时间内掌握互联网金融知......一起来看看 《超简单!一学就懂的互联网金融》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具