switchToLatest
switchToLatest 的工作原理
switchToLatest 的工作原理典型使用场景
签名
func switchToLatest<Upstream: Publisher, Output>(_ upstream: Publishers.Map<Upstream, Publishers.SwitchToLatest<Output>>) -> Publishers.SwitchToLatest<Upstream>示例:使用 switchToLatest
switchToLatestimport Combine
// 定义一个发出 Publisher 的 Publisher
let publisher1 = PassthroughSubject<Int, Never>()
let publisher2 = PassthroughSubject<Int, Never>()
let publisher3 = PassthroughSubject<Int, Never>()
let outerPublisher = PassthroughSubject<PassthroughSubject<Int, Never>, Never>()
let subscription = outerPublisher
.switchToLatest() // 切换到内层 Publisher
.sink { value in
print("Received value: \(value)")
}
outerPublisher.send(publisher1) // 订阅 publisher1
publisher1.send(1)
publisher1.send(2)
outerPublisher.send(publisher2) // 切换到 publisher2
publisher1.send(3) // 这不会被接收
publisher2.send(4)
publisher2.send(5)
outerPublisher.send(publisher3) // 切换到 publisher3
publisher2.send(6) // 这不会被接收
publisher3.send(7)输出结果:
工作原理总结
示例:实际应用中的动态请求
输出结果:
总结
Last updated