2016-08-20 7 views

답변

10

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입니다. 그러나 그것들을 확인하십시오. 요구 사항에 더 적합 할 수 있습니다.