RxSwift Creating

關於建立Observable

#1 Create

您能夠使用create操做符從零開始建立一個可觀察對象,傳遞給這個操做符一個函數,該函數接受observer做爲其參數,經過適當地調用observeronNextonErroronCompleted方法,將這個函數編寫爲一個可觀察的函數。 須要注意的是一個結構良好的Observable必須調用一次observeronCompletedonError方法,而且此後不能嘗試調用observer的任何其餘方法。git

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 github

建立一個不發出任何項但正常終止的Observable(調用onCompleted)數組

Never 建立一個不發出任何項且不終止的可觀察對象函數

Empty/Never這些對於測試目的頗有用,有時也能夠與其餘可觀測值結合使用,或者做爲指望其餘可觀測值做爲參數的操做符的參數。測試

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

做用將各類其餘對象和數據類型轉換爲可觀察的ui

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

建立一個Observable,它發出一個按給定時間間隔間隔的整數序列 Interval操做符返回一個可觀察到的值,該值發出一個無限的升序整數序列,在兩次發射之間選擇一個固定的時間間隔。spa

Observable<Int>.interval(1.0, scheduler: MainScheduler.instance)
    .subscribe {
        print($0)
    }
    .disposed(by: bag)
//每1秒發送一次從0開始升序的整數
複製代碼

#5 Just

建立一個發出特定值的Observable 與From類型,但要注意From會將數組裏的元素取出再發送出去,而Just只是簡單的將數組或對象做爲一個單獨值發送出去。code

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

建立一個Observable,該對象發出特定範圍的序列整數cdn

Observable.range(start: 1, count: 3)
    .subscribe{
        print($0)
    }
    .disposed(by: bag)
    
/*------ next(1) next(2) next(3) completed */ 
複製代碼

#7 Repeat

建立一個Observable,該對象屢次發出特定的項 server

該操做符重複發送一個項。

#8 Timer

建立一個Observable,它在給定的延遲以後發出特定的項

//5秒後發送一個Int值
Observable<Int>.timer(5, scheduler: MainScheduler.instance)
    .subscribe {
        print($0)
    }
    .disposed(by: bag)
/*------- next(0) completed */
複製代碼

#9 Of

此方法建立一個Observable,該實例具備可變數量的元素。 功能與From相同,From接受數組爲元素,Of接受可變數量的元素

let ofObservable = Observable<Any>.of(1,"test",0.3)

ofObservable.subscribe{
    print($0)
}
.disposed(by: bag)

/*------------- next(1) next(test) next(0.3) completed */
複製代碼

文章出處

相關文章
相關標籤/搜索