RxSwift 內(nèi)置了很多事件發(fā)生器, 所以你并不需要每次都是用 create 創(chuàng)建.
never/ empty/ just/ error
這個(gè)很特別, 是用這個(gè)工廠方法創(chuàng)建的可觀察對(duì)象什么都不會(huì)發(fā)送, 也不會(huì)結(jié)束
Observable<String>.never().subscribe { (_) in
print("nerver print")
}.disposed(by: disposeBag)
比如這上面的這個(gè) print 永遠(yuǎn)不會(huì)輸出
你也可以自己用寫一個(gè) never
Observable<String>.create({ (observer) -> Disposable in
return Disposables.create()
}).subscribe { (_) in
print("nerver print")
}.disposed(by: disposeBag)
就像這樣, 既沒(méi)有任何事件, 也沒(méi)有結(jié)束
------->
empty和 never 唯一的不同就是會(huì)有一個(gè)結(jié)束事件, 也不會(huì)有任何的 next 事件發(fā)出
----|--->
just 會(huì)有一個(gè) next 事件發(fā)出, 然后就結(jié)束.
----1-|-->
error 和 empty 類似, 不過(guò)不是結(jié)束事件, 而是錯(cuò)誤事件, 這個(gè)通常用于處理中拋出一個(gè)錯(cuò)誤
----×--->
of/ from/ range/ repeat/generate
of 則依順序發(fā)送多個(gè)事件, 然后再結(jié)束
from 和 of 類似, 不過(guò) from 只有一個(gè)參數(shù), 參數(shù)類型為序列, 內(nèi)部會(huì)自動(dòng)將序列拆開發(fā)送
range 則會(huì)生成一個(gè)根據(jù)起始值和重復(fù)次數(shù), 生成一個(gè)遞增序列
generate 使用一個(gè)初始值, 一個(gè)判斷語(yǔ)句, 以及一個(gè)獲取下一個(gè)值 的方式生成一個(gè)序列, 類似于C++的 for( int i = 0; i < 5; i++)
Observable.of(1, 2, 3, 4, 5).subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
Observable.generate(initialState: 1, condition: {$0 <= 5}, iterate: {$0 + 1})
.subscribe { (event) in
self.print(event)
}.disposed(by: disposeBag)
---1-2-3-4-5-|-->
repeatElement
repeatElement會(huì)生成一個(gè)無(wú)盡的隊(duì)列, 每次重復(fù)發(fā)送指定的數(shù)據(jù), 一般使用 take 語(yǔ)句取前幾個(gè)數(shù)據(jù), 如
Observable.repeatElement(1).take(3).subscribe { (event) in
self.print(event)
}.disposed(by: disposeBag)
---1-1-1-|-->