關(guān)于創(chuàng)建Observable
#1 Create
您可以使用create操作符從零開始創(chuàng)建一個(gè)可觀察對(duì)象榜田,傳遞給這個(gè)操作符一個(gè)函數(shù)牍白,該函數(shù)接受observer
作為其參數(shù)脊凰,通過適當(dāng)?shù)卣{(diào)用observer
的onNext
、onError
和onCompleted
方法茂腥,將這個(gè)函數(shù)編寫為一個(gè)可觀察的函數(shù)狸涌。
需要注意的是一個(gè)結(jié)構(gòu)良好的Observable
必須調(diào)用一次observer
的onCompleted
或onError
方法,并且此后不能嘗試調(diào)用observer
的任何其他方法最岗。
let source : Observable = Observable.create { observer in
for i in 1...5 {
observer.on(.next(i))
}
observer.on(.completed)
return Disposables.create {
print("disposed")
}
}
source.subscribe {
print($0)
}
/*-----
next(1)
next(2)
next(3)
next(4)
next(5)
completed
disposed
*/
#2 Empty/Never
Empty
創(chuàng)建一個(gè)不發(fā)出任何項(xiàng)但正常終止的Observable
(調(diào)用onCompleted)
Never
創(chuàng)建一個(gè)不發(fā)出任何項(xiàng)且不終止的可觀察對(duì)象
Empty/Never這些對(duì)于測(cè)試目的很有用帕胆,有時(shí)也可以與其他可觀測(cè)值結(jié)合使用,或者作為期望其他可觀測(cè)值作為參數(shù)的操作符的參數(shù)般渡。
let never = Observable<Any>.never()
let empty = Observable<Any>.empty()
never.subscribe { (event) in
print("never")
print(event)
}
.disposed(by: bag)
empty.subscribe { (event) in
print("empty")
print(event)
}
.disposed(by: bag)
/*------
empty
completed
*/
#3 From
作用將各種其他對(duì)象和數(shù)據(jù)類型轉(zhuǎn)換為可觀察的
let anyArray : [Any] = ["string", 1 , 0.3]
let source = Observable.from(anyArray)
source.subscribe {
print($0)
}
/*----------
next(string)
next(1)
next(0.3)
completed
*/
#4 Interval
創(chuàng)建一個(gè)Observable
懒豹,它發(fā)出一個(gè)按給定時(shí)間間隔間隔的整數(shù)序列
Interval操作符返回一個(gè)可觀察到的值,該值發(fā)出一個(gè)無限的升序整數(shù)序列驯用,在兩次發(fā)射之間選擇一個(gè)固定的時(shí)間間隔脸秽。
Observable<Int>.interval(1.0, scheduler: MainScheduler.instance)
.subscribe {
print($0)
}
.disposed(by: bag)
//每1秒發(fā)送一次從0開始升序的整數(shù)
#5 Just
創(chuàng)建一個(gè)發(fā)出特定值的Observable
與From類型,但要注意From會(huì)將數(shù)組里的元素取出再發(fā)送出去蝴乔,而Just只是簡(jiǎn)單的將數(shù)組或?qū)ο笞鳛橐粋€(gè)單獨(dú)值發(fā)送出去记餐。
let source = Observable.just(1, 2, 3)
source.subscribe {
print($0)
}
let source2 = Observable.just([1,2,3])
source2.subscribe {
print($0)
}
/* ------
next((1, 2, 3))
completed
next([1, 2, 3])
completed
*/
#6 Range
創(chuàng)建一個(gè)Observable
,該對(duì)象發(fā)出特定范圍的序列整數(shù)
Observable.range(start: 1, count: 3)
.subscribe{
print($0)
}
.disposed(by: bag)
/*------
next(1)
next(2)
next(3)
completed
*/
#7 Repeat
創(chuàng)建一個(gè)Observable
薇正,該對(duì)象多次發(fā)出特定的項(xiàng)
該操作符重復(fù)發(fā)送一個(gè)項(xiàng)剥扣。
#8 Timer
創(chuàng)建一個(gè)Observable
巩剖,它在給定的延遲之后發(fā)出特定的項(xiàng)
//5秒后發(fā)送一個(gè)Int值
Observable<Int>.timer(5, scheduler: MainScheduler.instance)
.subscribe {
print($0)
}
.disposed(by: bag)
/*-------
next(0)
completed
*/
#9 Of
此方法創(chuàng)建一個(gè)Observable
,該實(shí)例具有可變數(shù)量的元素钠怯。
功能與From相同佳魔,F(xiàn)rom接受數(shù)組為元素,Of接受可變數(shù)量的元素
let ofObservable = Observable<Any>.of(1,"test",0.3)
ofObservable.subscribe{
print($0)
}
.disposed(by: bag)
/*-------------
next(1)
next(test)
next(0.3)
completed
*/