概述
这篇总结一下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 error:[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等~写的不对的,请大佬多多指教~ 文章里几个例子没有写结果,感兴趣的同学可以自己试一下~祝大家玩得开心
转载于:https://juejin.im/post/5d061f29e51d4510624f97ca
最后
以上就是忧心小刺猬为你收集整理的RAC使用(一)——关键字的全部内容,希望文章能够帮你解决RAC使用(一)——关键字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复