combineLatest는 여러 Publisher들로부터 발행되는 최신 값들을 결합하는 데 사용돼요. 두 개 이상의 Publisher가 “최소 한 번 이상” 값을 발행했을 때 작동을 시작합니다.

이후 어느 한 Publisher에서 새로운 값이 방출될 때마다 combineLatest는 각 Publisher의 가장 최신 값을 결합하여 새로운 값으로 발행해요.

기능

사용

let publisher1 = PassthroughSubject<Int, Never>()
let publisher2 = PassthroughSubject<String, Never>()

publisher1.combineLatest(publisher2)
    .sink { int, string in
        print("Received \\(int) and \\(string)")
    }
    .store(in: &cancellables)

publisher1.send(1) // 아직 publisher2에서 값이 방출되지 않았으므로 출력되지 않음
publisher2.send("A") // publisher1과 publisher2 모두에서 값이 방출되었으므로, "Received 1 and A" 출력
publisher1.send(2) // "Received 2 and A" 출력
publisher2.send("B") // "Received 2 and B" 출력

// 결과
Received 1 and A
Received 2 and A
Received 2 and B
let publisher1 = PassthroughSubject<String, Never>()
let publisher2 = CurrentValueSubject<Int?, Never>(2)

Publishers.CombineLatest(publisher1, publisher2)
  .sink { completion in
    print(completion)
  } receiveValue: { value1, value2 in
    print("\\(value1), \\(value2)")
  }
  .store(in: &cancellables)

publisher1.send("hi")
  

// 결과
hi, Optional(2)

Publishers는 Publisher Operator들을 사용하기 위한 namespace로 특정 publisher에 종속될 필요없이 Operator을 사용하는 상황에서 유용해요.