上一篇,我们学习了如何创建一个observable,接下来我们继续学习,直接开始吧
订阅序列(Subscribing to observables)
NotificationCenter相信大家一定很熟悉,其向观察者(observer)播送通知(notification)。在Rx中不必再那么麻烦了。有更高效的方法来解决通知这一功能点。
在上一篇的例子中,我们将代码改为以下形式:
现在,我们在这段代码下,添加如下代码来订阅observable:
观察调试板面,你会得到如下
当我们查看subscribe操作符时,我们会发现,他其实是在操作一个逃逸闭包,这个逃逸闭包操作了一个Int型事件(Event)且该事件不返回任何东西。另,subscribe操作符返回了一个Disposable类型的东西。
在打印结果中我们可以看到,next事件发生了三次,然后是completed事件。而在实际的编码中,我们才不关心事件发生了几次,更关心的是每次事件的结果,也就是值,对吧。
为了能直接获取每次事件发生后所产生的值,我们将代码改成下面这个样子
呐,打印板就会变成下面的样子
注意:所有的操作符,或者我们说是方法的标志符,其内部所含的东西叫做元素,比如说next(1),这里面的1,就是操作符next的其中一个元素。在Rx中任何序列,都是通过点语法的方式调用。
尝试过让Observable为空吗?(特殊操作符,想记了记,不想记算求)来试试
试着订阅他
看看打印版什么变化,由于completed操作符不含任何元素,所以他打印了一段message----“Completed”。
这玩意该咋用呢?什么时候用呢?
当你想要返回一个立即终止的或着有意地含有零值的observable时,还是很好用的。
与empty相对的,则是never操作符了,如字面意思,表示永不终止,写法如下
到现在为止,我们都一直在操作显式变量的observables,然而我们也可以从一系列值生成observables。
范例如下:
我们来一层一层的剖析这段代码
1、通过range操作符创建了一个observable,该操作符由一个start整型值和一个序列的整型值count来生成。
2、每一次发出时间的时候计算并打印第n个斐波拉切数。
除了never()的例子,到目前为止,我们都在使用可以自动发出,完成事件并自然终止的observable。