서로 다른 타입의 옵저버블도 하나로 묶을 수 있다

Indexed Sequencing
- 소스 옵저버블이 방출하는 이벤트를 결합
- 항상 각 스트림의 발생순서 대로 짝을 맞추어 방출한다.
- 예를 들어, 첫번째 요소는 첫번째 요소와 두번째 요소는 두번째 요소와만 결합해서 방출한다
- n번째 요소 중 가장 마지막에 방출되는 이벤트 시점에 짝을 맞추어 튜플로 방출된다
- combination 당 하나의 싱글 아이템만 방출한다
- 짝이 맞으면 고려가능
- 소스 옵저버블중 하나라도 onCompleted 이벤트를 방출했다면 그 인덱스 이후에는 이벤트가 발생하지 않는다.
- 구독자에게 completed/ error 이벤트가 전달되는 방식
- completed : 소스 옵저버블 전부가 completed 이벤트를 전달되었을때
- error : 이벤트가 하나라도 발생된다면 바로 구독자에게
사용 예시
- 비동기 이벤트 n개가 모두 완료된 시점을 잡고 싶을 때
소스코드
둘 중 하나가 에러이벤트를 발생시키면 구독자에게 에러가 전달된다.
enum MyError: Error {
case some
}
let obs1 = Observable.of(1, 2)
let obs2 = Observable<String>.create { observer in
observer.onError(MyError.some)
return Disposables.create()
}
Observable
.zip(obs1, obs2)
.subscribe(onNext: { print($0) }, onError: { error in
print("error")
})
.disposed(by: disposeBag)
// "error" 출력
참고 자료