switchToLatest는 Publisher가 받은 가장 마지막의 Publisher만 취급하는 함수입니다.
예를 들어 아래처럼 Publisher가 Publisher를 받을 수 있을 때
let publisher = PassthroughSubject<PassthroughSubject<Int, Never>, Never>()
subject에 몇 개의 Subject를 취급하게 하고 각각의 Publisher가 값을 발행하는 경우가 있다고 합시다.
let targetPublisher1 = PassthroughSubject<Int, Never>()
let targetPublisher2 = PassthroughSubject<Int, Never>()
publisher.send(targetPublisher1)
targetPublisher1.send(1)
targetPublisher1.send(2)
publisher.send(targetPublisher2)
targetPublisher1.send(3) <-- 여기 주목
targetPublisher2.send(4)
targetPublisher2.send(5)
그리고 일반적인 경우으로 구독을 받으려면 아래 코드처럼 진행했을거에요.
let cancellable = publisher.sink {
$0.sink { value in
print(value)
}
.store(in: &cancellables)
}
// 결과
1
2
3
4
5
하지만 만약 내가 마지막으로 보낸 publisher의 값만 취급하려면, 이때 switchToLatest()
를 써주면 됩니다.
let cancellable = publisher.switchToLatest().sink { value in
print(value)
}
/// 결과
1
2
4
5