5
Observable
의 두 가지 유형을 RxSwift에 병합하는 방법은 무엇입니까? 예를 들어RxSwift가 서로 다른 종류의 Observables를 병합합니다.
:
var a: Observable<Int>
var b: Observable<Void>
Observable.of(a,b).merge()
인해 입력 파라미터 차이 불가능하다.
Observable
의 두 가지 유형을 RxSwift에 병합하는 방법은 무엇입니까? 예를 들어RxSwift가 서로 다른 종류의 Observables를 병합합니다.
:
var a: Observable<Int>
var b: Observable<Void>
Observable.of(a,b).merge()
인해 입력 파라미터 차이 불가능하다.
merge
이들 모두는 Element
과 동일한 유형이어야합니다.
그래서 하나의 옵션은 유형 정보를 버리고 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
1
2
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이다 같은 (C 다양한 종류의Observable
를 조합 할 수있는 다른 사업자로
: 요소는 STRING입니다210 및 combineLatest
), 전혀 작동하지 않는 사람은 merge
입니다. 그러나 그것들을 확인하십시오. 요구 사항에 더 적합 할 수 있습니다.