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을 사용하는 상황에서 유용해요.