簡體   English   中英

使用RxSwift觀察Swift 3中的數組

[英]Observe array in Swift 3 using RxSwift

要在Swift 2中使用RxSwift創建一個可觀察的數組,我用它來做:

[1, 2, 3].toObservable().subscribeNext { print($0) }

但是在Swift 3中,它不再起作用了,我收到了這個錯誤:

類型'[Int]'的值沒有成員'toObservable'

如何從swift數組創建一個RxSwift可觀察數組?

不推薦使用toObservable array-to-Observable構造函數。

創造一個冷的可觀察者

使用from運算符來創建冷可觀察量:

let stream : Observable<Int> = Observable.from([1,2,3])

或者,如果您需要將整個數組作為條目,請使用just運算符創建一個冷可觀察對象。

let singleEmissionStream : Observable<[Int]> = Observable.just([1,2,3])

調用fromjust運算符時數組的元素將是onNext事件的最終排放集,並以onCompleted事件結束。 對數組的更改將不會被識別為此可觀察序列的新事件。

這意味着如果您不需要監聽該數組的更改,則可以使用justfrom運算符來創建observable。

但是,如果我需要聽取數組元素的更改呢?

要觀察數組[E] ,您需要使用像Variable RxSwift單元這樣的熱觀察,如k8mil的答案中所述。 您將擁有一個類型為Variable<[E]>的實例,其中每個onNext發射都是數組的當前狀態。

感冒和熱觀察之間有什么區別?

RxSwiftreactivex.io的文檔中解釋了冷觀察和熱觀察之間的區別。 以下是與熱觀測值相比較的冷觀測值的簡短描述。

Cold Observables在訂閱時開始運行,即,當調用Subscribe時,可觀察序列僅開始向觀察者推送值。 [...]這與熱觀察不同,例如鼠標移動事件或股票代碼,即使在訂閱激活之前,它們已經產生了價值。

fromjust運算符在代碼運行時獲取數組的當前狀態,從而最終確定它將為其可觀察序列觸發的排放集,無論它何時被訂閱。 這就是為什么稍后對數組中元素集的更改不會改變在使用fromjust運算符創建observable期間被識別為排放的元素集。

在使用RxSwift 3.0 Swift 3中,我會這樣做:

var array: Variable<[Int]> = Variable([1, 2, 3])
array.asObservable().subscribe(onNext: {
        updatedArray in
        print(updatedArray)
})
array.value.append(4) // it will trigger `onNext` event 

因此,主要區別在於您必須創建一個Variable對象而不是使用顯式數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM