[英]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])
調用
from
或just
運算符時數組的元素將是onNext
事件的最終排放集,並以onCompleted
事件結束。 對數組的更改將不會被識別為此可觀察序列的新事件。
這意味着如果您不需要監聽該數組的更改,則可以使用just
和from
運算符來創建observable。
要觀察數組[E]
,您需要使用像Variable
RxSwift單元這樣的熱觀察,如k8mil的答案中所述。 您將擁有一個類型為Variable<[E]>
的實例,其中每個onNext
發射都是數組的當前狀態。
在RxSwift和reactivex.io的文檔中解釋了冷觀察和熱觀察之間的區別。 以下是與熱觀測值相比較的冷觀測值的簡短描述。
Cold Observables在訂閱時開始運行,即,當調用Subscribe時,可觀察序列僅開始向觀察者推送值。 [...]這與熱觀察不同,例如鼠標移動事件或股票代碼,即使在訂閱激活之前,它們已經產生了價值。
from
和just
運算符在代碼運行時獲取數組的當前狀態,從而最終確定它將為其可觀察序列觸發的排放集,無論它何時被訂閱。 這就是為什么稍后對數組中元素集的更改不會改變在使用from
或just
運算符創建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.