RACCommand中的信号
示例:
RACSignal* textSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@()];
[subscriber sendNext:@()];
[subscriber sendError:[NSError new]];
return nil;
}];
RACCommand* textCommad = [[RACCommand alloc]initWithSignalBlock:^RACSignal *(id input) {
return textSignal;
}];
self.createButton.rac_command = textCommad;
[textCommad.executing subscribeNext:^(id x) {
NSLog(@"executing%@",x);
}];
[textCommad.executionSignals subscribeNext:^(id x) {
NSLog(@"executionSignals%@",x);
}];
[[textCommad.executionSignals switchToLatest]subscribeNext:^(id x) {
NSLog(@"executionSignals switchLatest%@",x);
}];
[textCommad.errors subscribeNext:^(id x) {
NSLog(@"errors");
}];
输出:
2015-08-09 22:17:27.610 ReactiveCocoaDemo[7181:141024] executing0
2015-08-09 22:17:30.325 ReactiveCocoaDemo[7181:141024] executing1
2015-08-09 22:17:30.325 ReactiveCocoaDemo[7181:141024] executionSignals<RACDynamicSignal: 0x7f89b3c6ca20> name:
2015-08-09 22:17:30.326 ReactiveCocoaDemo[7181:141024] executionSignals switchLatest1
2015-08-09 22:17:30.326 ReactiveCocoaDemo[7181:141024] executionSignals switchLatest2
2015-08-09 22:17:30.327 ReactiveCocoaDemo[7181:141024] errors
2015-08-09 22:17:30.327 ReactiveCocoaDemo[7181:141024] executing0
结论:
1.executing信号一绑定就会sendNext:@(NO);如果想忽略第一次的Next,使用[executing skip:1]
2.按钮点击事件发生时,首先exectuing会sendNext:@(YES);然后executionSignals会sendNext一个RACSignal对象,该对象就是RACCommand创建时传入的block的返回值,。 改正:该RACSignal对象与RACCommand创建时传入的block的返回值不是同一个对象,但是他们两个会sendNext相同的值。
3.注意executionSignals是信号的信号,即它的值类型为RACSignal,而我们一般希望捕获的是RACSignal所携带的值,因此可以使用switchToLatest或flatten的方法来做到;也可以直接对该RACSignal进行订阅。
4.errors包含了RACComand执行过程产生的所有错误。
5.等到RACCommand中的Signal都完毕了(complete或error),exectuting会sendNext:@(NO).
RACCommand中的信号的更多相关文章
- Qt5中的信号槽
Qt4中的信号槽 Qt4中的信号槽是通过SIGNAL,SLOT两个宏,将参数转换成字符串.Qt编译前,会从源码的头文件中提取由signal和slot声明的信号和槽的函数, 将其组成一张信号和槽对应的字 ...
- Linux中多线程信号的处理
1. 博文:Linux多线程中使用信号-1 http://blog.csdn.net/qq276592716/article/details/7325250 2. 博文:Linux多线程信号总结 ...
- QRadioButton类中Toggled()信号的使用方法
QRadioButton类中Toggled()信号的使用方法 1.说明 QRadioButton中,Toggled()信号是在Radio Button状态(开.关)切换时发出的,而clicked()信 ...
- 【转贴】gdb中的信号(signal)相关调试技巧
一篇不错的帖子,讲的是gdb中的信号(signal)相关调试技巧 转自Magic C++论坛 http://www.magicunix.com/index_ch.html http://www.m ...
- 在 docker 容器中捕获信号
我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程.这些操作的本质都是通过从主机向容器发送信号 ...
- PyQt5中的信号与槽,js 与 Qt 对象之间互相调用
一.PyQt中的信号与槽 信号(Signal)和槽(Slot)是Qt中的核心机制,用在对象之间互相通信.在Qt中每个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject ...
- Flask学习【第6篇】:Flask中的信号
实例化补充 instance_path和instance_relative_config是配合来用的.这两个参数是用来找配置文件的,当用app.config.from_pyfile('settings ...
- 关于IP核中中断信号的使用---以zynq系统为例
关于IP核中中断信号的使用---以zynq系统为例 1.使能设备的中断输出信号 2.使能处理器的中断接收信号 3.连接IP核到处理器之间的中断 此处只是硬件的搭建,软件系统的编写需要进一步研究. 搭建 ...
- 多线程中的信号机制--signwait()函数【转】
本文转载自:http://blog.csdn.net/yusiguyuan/article/details/14237277 在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别, ...
随机推荐
- 2018-2019-20172329 《Java软件结构与数据结构》第七周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第七周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十一章-二叉查找树 一.概述 1.什么是二 ...
- 20145214 《网络对抗技术》 MSF基础应用
20145214 <网络对抗技术> MSF基础应用 1.实验后回答问题--用自己的话解释什么是exploit,payload,encode 如果把MSF比作一把枪的话,payload应该是 ...
- 20162325 金立清 S2 W9 C18
20162325 2017-2018-2 <程序设计与数据结构>第9周学习总结 教材学习内容概要 堆是一棵完全二叉树,其中每个元素大于等于其所有子结点的值. 向堆中添加一个元素的方法是,首 ...
- “私人助手”Beta版使用说明
私人助手(Beta)版使用说明 私人助手这款软件是通过添加事件提醒功能,让用户能在正确的时间做正确的事情,使得工作变得更有效率,而这款软件的特色在于提醒模式的添加,用户可以通过震动.铃声提醒,我们的特 ...
- github基础操作
1.最简单实用的操作 更新远程仓库 git status git add . git commit -m "add" git push #git push -u origin ma ...
- Do~Hamburger~
在上一次的结对编程中,我的结对队友是 方俊杰 ,大家都称他为“JJ师兄”. 我们两个彼此在合作中发现错误并在合作中一起进步. First(汉堡上层面包): JJ他的JAVA功底比我扎实很多,所 ...
- BZOJ 3132(上帝造题的七分钟-树状数组求和+2D逆求和数组)
3132: 上帝造题的七分钟 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 46 Solved: 18[Submit][Status][Discus ...
- python字符串操作、文件操作,英文词频统计预处理
1.字符串操作: 解析身份证号:生日.性别.出生地等. 凯撒密码编码与解码 网址观察与批量生成 解析身份证号:生日.性别.出生地等 def function3(): print('请输入身份证号') ...
- PAT 甲级 1150 Travelling Salesman Problem
https://pintia.cn/problem-sets/994805342720868352/problems/1038430013544464384 The "travelling ...
- jenkins构建启动失败
有一个项目,在启动的时候读取了环境变量,第一次写了一个启动脚本如下 #!/bin/bash --login jarFile=$ pid=`ps -ef | grep $jarFile | grep ' ...