5
Observable
のRxSwiftに2種類の異なる種類をマージする方法はありますか?例えばRxSwiftはObservablesの異なる種類をマージする
:
var a: Observable<Int>
var b: Observable<Void>
Observable.of(a,b).merge()
が原因型パラメータ差のは不可能です。
Observable
のRxSwiftに2種類の異なる種類をマージする方法はありますか?例えばRxSwiftはObservablesの異なる種類をマージする
:
var a: Observable<Int>
var b: Observable<Void>
Observable.of(a,b).merge()
が原因型パラメータ差のは不可能です。
merge
これらは、同じ種類のものが必要です()。
したがって、1つのオプションは、型情報を破棄してAnyObject
にキャストすることです。今、彼らはマージすることができます。
let stringSubject = PublishSubject<String>()
let stringObservable = stringSubject.asObservable().map { $0 as AnyObject }
let intSubject = PublishSubject<Int>()
let intObservable = intSubject.asObservable().map { $0 as AnyObject }
Observable.of(stringObservable, intObservable).merge()
.subscribeNext { print($0) }
.addDisposableTo(disposeBag)
stringSubject.onNext("a")
stringSubject.onNext("b")
intSubject.onNext(1)
intSubject.onNext(2)
stringSubject.onNext("c")
出力:
B
C
別のオプションは、列挙型で、その後ラップするだろう:
enum Container {
case S(String)
case I(Int)
}
let stringSubject = PublishSubject<String>()
let stringObservable = stringSubject.asObservable().map { Container.S($0) }
let intSubject = PublishSubject<Int>()
let intObservable = intSubject.asObservable().map { Container.I($0) }
Observable.of(stringObservable, intObservable).merge()
.subscribeNext { e in
switch e {
case .S(let str):
print("next element is a STRING: \(str)")
case .I(let int):
print("next element is an INT: \(int)")
}
}
.addDisposableTo(disposeBag)
stringSubject.onNext("a")
stringSubject.onNext("b")
intSubject.onNext(1)
intSubject.onNext(2)
stringSubject.onNext("c")
出力:
次の要素が文字列である:
次の要素が文字列である2
次:1つの
次の要素がINTである:
次の要素BがINTであります要素がSTRINGである:様々なタイプのObservable
を組み合わせることができる他の演算子として
C(等zip
およびcombineLatest
)、全く動作しないものは全くありません。merge
。しかし、それらをチェックしてください。彼らはあなたの要求にもっと適しているかもしれません。