debounce
debounce 的签名
debounce 的签名func debounce(for: Scheduler.TimeInterval, scheduler: Scheduler) -> Publishers.Debounce<Self>工作原理
示例:基本用法
import Combine
let publisher = PassthroughSubject<Int, Never>()
let subscription = publisher
.debounce(for: .seconds(1), scheduler: DispatchQueue.main) // 延迟 1 秒
.sink { value in
print("Received value: \(value)")
}
// 模拟快速发送值
publisher.send(1)
publisher.send(2)
publisher.send(3)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
publisher.send(4) // 这会重置计时
}
DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
publisher.send(5) // 1 秒后发出值
}输出结果(1 秒后):
示例:处理用户输入
输出结果(0.5 秒后):
debounce 与调度器
debounce 与调度器使用 debounce 在后台线程
debounce 在后台线程输出结果(1 秒后):
debounce 的注意事项
debounce 的注意事项总结
Last updated