你在這裏做什麼完全取決於什麼subscribe
閉包看起來像。如果你正在做同樣的事情到每一個項目在任何一個變量,無論哪種類型,然後只需將它們都映射到相同的類型:
let bag = DisposeBag()
let intVariable = Variable<Int>(10)
let stringVariable = Variable<String>("Hello, RxSwift")
let genericArray = Observable.merge([intVariable.asObservable().map { "\($0)" }, stringVariable.asObservable()])
genericArray.subscribe(onNext: { print($0) }).disposed(by: bag)
intVariable.value = 5
stringVariable.value = "Goodby, RxSwift"
打印:
10
Hello, RxSwift
5
Goodby, RxSwift
如果要結合這兩個項目在某種程度上,你需要最新發射的各個變量的,你需要保持類型信息,然後做到這一點:
let genericArray = Observable.combineLatest(intVariable.asObservable(), stringVariable.asObservable())
打印:
(10, "Hello, RxSwift")
(5, "Hello, RxSwift")
(5, "Goodby, RxSwift")
如果你只希望你的訂閱,當一個新的元素從中發出變量,然後被觸發:
let genericArray = Observable.zip(intVariable.asObservable(), stringVariable.asObservable())
它打印:
(10, "Hello, RxSwift")
(5, "Goodby, RxSwift")
我將避免(RxSwift merge different kind of Observables)中提到的解決方案
我懷疑這是可能的嗎?您需要訂閱不同類型的變量的情況如何? – iWheelBuy
而不是製作一個循環來訂閱每個單獨的observable,我建議訂閱一次to合併的observables序列。既然你有不同類型的變量,你可以執行這裏描述的解決方法http://stackoverflow.com/questions/39050059/rxswift-merge-different-kind-of-observables – Nimble
謝謝@Nimble,對我的情況很好。 –