ReactiveCocoa常见操作方法介绍:

demo地址:https://github.com/SummerHH/ReactiveCocoa.git

  • filter

  • ignore

  • ignoreValues

  • takeUntilBlock

  • distinctUntilChanged

  • take

  • takeLast

  • takeUntil

  • skip

  • switchToLatest

filter: 过滤信号,使用它可以获取满足条件的信号.

//filter 过滤
//每次信号发出,会先执行过滤条件判断
[_textField.rac_textSignal filter:^BOOL(NSString *value) { return value.length > ;
}];

ignore:忽略完某些值的信号.

// 内部调用filter过滤,忽略掉ignore的值
[[_textField.rac_textSignal ignore:@""] subscribeNext:^(id x) {
NSLog(@"ignore%@",x);
}];

ignoreValues 这个比较极端,忽略所有值,只关心Signal结束,也就是只取Comletion和Error两个消息,中间所有值都丢弃

 RACSignal *signal=[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@""];
[subscriber sendNext:@""];
[subscriber sendNext:@""];
[subscriber sendNext:@"wujy"];
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
NSLog(@"执行清理");
}];
}]; [[signal ignoreValues] subscribeNext:^(id x) {
//它是没机会执行 因为ignoreValues已经忽略所有的next值
NSLog(@"ignoreValues当前值:%@",x);
} error:^(NSError *error) {
NSLog(@"ignoreValues error");
} completed:^{
NSLog(@"ignoreValues completed");
}];

distinctUntilChanged:当上一次的值和当前的值有明显的变化就会发出信号,否则会被忽略掉。

 // 过滤,当上一次和当前的值不一样,就会发出内容。
// 在开发中,刷新UI经常使用,只有两次数据不一样才需要刷新 [[_textField.rac_textSignal distinctUntilChanged] subscribeNext:^(id x) {
NSLog(@"distinctUntilChanged%@",x);
}];

take:从开始一共取N次的信号

 //1.创建信号
RACSubject *signal = [RACSubject subject];
//2.处理信号,订阅信号
[[signal take:] subscribeNext:^(id x) {
NSLog(@"take:%@",x); }]; // 3.发送信号
[signal sendNext:@]; [signal sendNext:@];

takeLast:取最后N次的信号,前提条件,订阅者必须调用完成,因为只有完成,就知道总共有多少信号.

 //1.创建信号
RACSubject *signal = [RACSubject subject];
//2.处理信号,订阅信号
[[signal takeLast:] subscribeNext:^(id x) {
NSLog(@"%@",x); }]; //3.发送信号
[signal sendNext:@];
[signal sendNext:@];
[signal sendNext:@];
[signal sendCompleted];

takeUntil:(RACSignal *):获取信号直到执行完这个信号

  // 监听文本框的改变,知道当前对象被销毁
[_textField.rac_textSignal takeUntil:self.rac_willDeallocSignal];

takeUntilBlock 对于每个next值,运行block,当block返回YES时停止取值

  RACSignal *signal=[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@""];
[subscriber sendNext:@""];
[subscriber sendNext:@""];
[subscriber sendNext:@"wujy"];
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
NSLog(@"执行清理");
}];
}]; [[signal takeUntilBlock:^BOOL(NSString *x) {
if ([x isEqualToString:@""]) {
return YES;
}
return NO;
}] subscribeNext:^(id x) {
NSLog(@"takeUntilBlock 获取的值:%@",x);
}]; // 输出
// takeUntilBlock 获取的值:1
// takeUntilBlock 获取的值:3

skip:(NSUInteger):跳过几个信号,不接受。

 [[_textField.rac_textSignal skip:] subscribeNext:^(id x) {
NSLog(@"跳过几个信号不接收%@",x);
}];

switchToLatest:用于signalOfSignals(信号的信号),有时候信号也会发出信号,会在signalOfSignals中,获取signalOfSignals发送的最新信号。

 RACSubject *signalOfSignals = [RACSubject subject];
RACSubject *signal = [RACSubject subject];
[signalOfSignals sendNext:signal];
// 获取信号中信号最近发出信号,订阅最近发出的信号。
// 注意switchToLatest:只能用于信号中的信号 [signalOfSignals.switchToLatest subscribeNext:^(id x) { NSLog(@"获取信号中信号最近发出信号,订阅最近发出的信号%@",x);
}];

iOS开发ReactiveCocoa学习笔记(五)的更多相关文章

  1. iOS开发ReactiveCocoa学习笔记(一)

    学习 RAC 我们首先要了解 RAC 都有哪些类 RACSignal RACSubject RACSequence RACMulticastConnection RACCommand 在学习的时候写了 ...

  2. iOS开发ReactiveCocoa学习笔记(六)

    RAC操作方法三. demo地址:https://github.com/SummerHH/ReactiveCocoa.git doNext deliverOn timeout interval del ...

  3. iOS开发ReactiveCocoa学习笔记(四)

    ReactiveCocoa常见操作方法介绍: demo地址:https://github.com/SummerHH/ReactiveCocoa.git 1.1 ReactiveCocoa操作须知 所有 ...

  4. iOS开发ReactiveCocoa学习笔记(二)

    RAC 中常见的宏: 使用宏定义要单独导入 #import <RACEXTScope.h> 一. RAC(TARGET, [KEYPATH, [NIL_VALUE]]):用于给某个对象的某 ...

  5. iOS开发ReactiveCocoa学习笔记(三)

    RAC常用用法: 1.监听按钮的点击事件: UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame ...

  6. python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍

    python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...

  7. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  8. go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])

    目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...

  9. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

随机推荐

  1. 关于Confusion Matrix

    from sklearn.metrics import confusion_matrixy_true = [2, 0, 2, 2, 0, 1]y_pred = [0, 0, 2, 2, 0, 2]pr ...

  2. linux命令-yum工具详解

    yum比rpm的优势在于解决依赖关系.可以指定源. [root@wangshaojun ~]# yum list ////列出rpm包资源 网络资源 rrdtool-php.      x86_64 ...

  3. 学习Web前端的好网站推荐

    说明:将其他技术技术网址也搜藏到下面,与君共同进步 1.Jquery专题 http://kb.cnblogs.com/zt/jquery/ 2.Entity Framwork专题 http://kb. ...

  4. 删除eclipse Maven 进程 导致eclipse的workspace 启动不了

    异常描述: An internal error occurred during: "reload maven project". java.lang.NullPointerExce ...

  5. 【总结整理】JQuery基础学习---样式篇

    进入官方网站获取最新的版本 http://jquery.com/download/    中文 https://www.jquery123.com/ <!--JQuery:轻量级的JavaScr ...

  6. xgene:肿瘤相关基因 KRAS,,BRAF,,通路PI3K-AKT

    KRAS基因 一个是KRAS1,位于chr6 短臂上,是一个“假基因”,它不能被转录成RNA,故没有功能的 另一个是KRAS2,位于chr12 短臂上..是“真基因”,是能够转录.并且翻译成蛋白的,是 ...

  7. Sublime Text 3下安装Emmet的问题

    电脑装了Sublime Text 3,顺便安装了很多插件,今天编写前端HTML代码时,想用起前端常用的Emmet插件的功能,Emmet插件已经安装好了,奈何输入简写格式,按“CTRL+E”,没有反应. ...

  8. 记录一次坎坷的linux内网渗透过程瞎折腾的坑

    版权声明:本文为博主的原创文章,未经博主同意不得转载. 写在前面 每个人都有自己的思路和技巧,以前遇到一些linux的环境.这次找来一个站点来进行内网,写下自己的想法 目标环境 1.linux  2. ...

  9. 【解决】client does not support authentication

    cmd窗口登陆mysql: C:\Users\Administrator>  sqlplus  /nolog mysql>  conn / as sysdba; mysql> alt ...

  10. Unity3d 控制物体移动、旋转、缩放

    在Unity中通过利用 Input Manager(输入管理器)可以很简单的实现对一个物体进行移动.旋转.缩放操作. 演示代码: //通过虚拟轴控制物体移动.旋转.缩放 public class Mo ...