combineLatest, zip은 여러개의 Observable을 조합하여 단일 Observable을 방출하는 Combining Operator 이다.

CombineLatest

스크린샷 2024-07-02 오전 1.44.07.png

combieLatest는 소스 옵저버블이 각 소스 옵저버블이 이벤트를 방출하고 나서 첫 이벤트를 방출하고 그 이후에 소스 옵저버블이 새로운 값을 방출할때 그 값을 결합한 이벤트를 방출한다.

스크린샷 2024-07-02 오전 1.46.54.png

소스 옵저버블을 받고 resultSelector로 값을 전달한다.

zip

zip은 Combine Latest와 동일하게 소스 옵저버블 모두 이벤트를 방출해야 값을 방출한다. Combie Latest와 차이점은 소스 옵저버블 모두 새로운 값으로 이벤트를 방출해야 값을 방출한다.

스크린샷 2024-07-02 오전 1.39.26.png

코드

스크린샷 2024-07-02 오전 1.41.38.png

source 옵저버블을 받고 resultSelector로 결과를 전달한다.

Observable.zip(numbers, strings) { "\\($0) - \\($1)"}
    .subscribe { print($0) }
    .disposed(by: bag)

numbers.onNext(1)
strings.onNext("one") // 1 - one
    
numbers.onNext(2) // 아직까지 새로운 값을 방출하지 않는다.
strings.onNext("two") // 2 - two

numbers.onCompleted() // 하나라도 completed가 전달되면 더이상 방출하지 않는다.
strings.onCompleted() // 2개의 소스모두 completed가 전달되면 최종적으로 종료

1과 one이 전달되고 나서 next 이벤트로 2를 전달했지만 Observable은 새로운 값을 방출하지 않는다.