ReactiveCocoa的另外一种流:信号
本篇我们介绍ReactiveCocoa的另一种类型的流,即信号。信号是push-driven
的,这点与序列流正好相反,新值虽然能够通过管道进行发布却不能像pull-driven
一样在管道中获取,它们所抽象出来的数据只会在以后的某个时间进行传送。
这里需要理解两个概念:pull-driven
和push-driven
.
Push-driven means that values for the signal are not defined at the moment of signal creation and may become available at a later time (for example, as a result from network request, or any user input).
Push-driven : 在创建信号的时候,信号不会被立即赋值,之后才会被赋值(举个栗子:网络请求回来的结果或者是任意的用户输入的结果)
Pull-driven means that values in the sequence are defined at the moment of signal creation and we can query values from the stream one-by-one.
Pull-driven : 在创建信号的同时序列中的值就会被确定下来,我们可以从流中一个个地查询值。
信号发送三种类型的值:Next Values
代表了下一个发送到管道内的值。Error Value
代表signal
无法成功完成,一般很少见,我们会在下一章学习怎么使用她们。Completion Values
代表signal
成功完成,我们也会在下一章来学习。这里要注意的是:
一个事情响应中,一个
signal
(信号)发送了一个Error value
或者一个Completion Value
后,就不会再发送任何其他的value
. 错误或者成功将只会发送其中一个,绝不会有两个同时发送的情况!
信号是ReactiveCocoa的核心组件之一。ReactiveCocoa为UIKit的每一个控件内置了一套信号选择器。例如,UITextField就有一个rac_textSignal
,UITextField中每一次按键的响应都会通过它发送出去。下一章我们会学习如何使用信号来执行任务。
信号也可以被链接(链式调用)和转化。通过映射或者过滤一个流得到的新的流也可以随后被映射、被过滤,进行所有你能想到的各种操作。在下一章中我们会更多的介绍这方面的内容。
更多建议: