特征序列
我們都知道?Swift?是一個(gè)強(qiáng)類型語言搅幅,而強(qiáng)類型語言相對于弱類型語言的一個(gè)優(yōu)點(diǎn)是更加嚴(yán)謹(jǐn)阅束。我們可以通過類型來判斷出,實(shí)例有哪些特征茄唐。同樣的在?RxSwift?里面?Observable?也存在一些特征序列息裸,這些特征序列可以幫助我們更準(zhǔn)確的描述序列。并且它們還可以給我們提供語法糖,讓我們能夠用更加優(yōu)雅的方式書寫代碼呼盆,他們分別是:Single年扩、Completable、Maybe访圃、Driver常遂、Signal、ControlEvent
一挽荠、Single
1.我們直接點(diǎn)進(jìn)碼源去看,發(fā)現(xiàn)Single本質(zhì)上就是一個(gè)PrimitiveSequence,PrimitiveSequence遵循PrimitiveSequenceType克胳,PrimitiveSequence本身沒有create()方法
PrimitiveSequenceType的拓展中有一個(gè)create(),在create()方法中圈匆,創(chuàng)建一個(gè)Observable隊(duì)列
PrimitiveSequence持有了Observable隊(duì)列
2.PrimitiveSequence本身并沒有subscribe()漠另,但是PrimitiveSequenceType的拓展中實(shí)現(xiàn)了subscribe()方法
self.primitiveSequence = self,
asObservable()返回的是剛出持有的Observable
3.根據(jù)核心邏輯我們知道會(huì)調(diào)用Observable.create()中的閉包
然后去調(diào)用Single.create()中的閉包
后面一部分和核心邏輯中的一致,直到
4.后面會(huì)去調(diào)用閉包
小結(jié):在核心邏輯中的流程是
Producer.subscribe->AnonymousObservable.run->AnonymousObservableSink.run->閉包A->AnyObserver.on->AnonymousObservableSink.on->Sink.forwardOn->ObserverBase.on->AnonymousObserver.onCore->閉包B
而在Single中會(huì)在閉包A后去調(diào)用Single中的閉包A,在閉包B后去調(diào)用Single中的閉包B
二、Completable本質(zhì)上其實(shí)也是PrimitiveSequence
和Single的區(qū)別和Maybe放到一起去說跃赚。
三笆搓、Maybe本質(zhì)上也是一個(gè)PrimitiveSequence
那么三者之間有什么區(qū)別呢
三者之間Single只能發(fā)送元素和error事件,Completable只能發(fā)送error事件和completed事件纬傲,Maybe可以發(fā)送元素和error事件和completed事件满败,Observable不是就能發(fā)送元素和error事件,completed事件了嗎叹括,我們在回過頭去看碼源
發(fā)現(xiàn)在PrimitiveSequenceType拓展的subscribe()方法中用stopped這三種特征序列只能發(fā)送一個(gè)元素或者一個(gè)事件算墨。
由此我們可以了解到Single只能發(fā)送一個(gè)元素或者一個(gè)error事件,Completable只能發(fā)送error事件或者completed事件,Maybe發(fā)送一個(gè)元素或者error事件或者completed事件