内容简介:这篇总结一下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等~写的不对的,请大佬多多指教~ 文章里几个例子没有写结果,感兴趣的同学可以自己试一下~祝大家玩得开心
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 番外篇2-基本规范、注释、static关键字、import关键字
- 说说iOS中的常用的关键字static ,class(仅限Swift关键字)
- Golang 关键字
- 2019 关键字
- golang关键字
- final关键字深入解析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Perl语言入门
[美] Randal L.Schwartz、Tom Phoenix / 李晓峰 / 中国电力出版社 / 2002-8 / 48.00元
本书第一版于1993年问世,并从此成为畅销书。本书由Perl社区最著名、最活跃的两位成员写成,是Perl程序设计语言的精髓指南。 Perl最初只是Unix系统管理员的一个工具,在工作日里被用在无数的小任务中。从那以后,它逐步发展成为一种全功能的程序设计语言,特别是在各种计算平台上,它被用作Web编程、数据库处理、XML处理以及系统管理——它能够完成所有这些工作,同时仍然是处理小的日常工作的完......一起来看看 《Perl语言入门》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
XML 在线格式化
在线 XML 格式化压缩工具