【发布时间】:2021-12-25 17:32:22
【问题描述】:
我想对一批事件进行去抖动处理,并在大约 1.5 秒的延迟后处理它们。这就是我所做的。
class ViewModel: ObservableObject {
@Published var pending: [TaskInfo]
private var cancellable: AnyCancellable? = nil
init() {
processPendingTasks()
}
func queueTask(task: TaskInfo) {
pending.append(task)
}
private func processPendingTasks() {
cancellable = $pendingTasks
.debounce(for: 1.5, scheduler: RunLoop.main)
.sink(receiveValue: { batch in
// Iterate though elements and process events.
})
}
}
问题:这很好用,但我遇到的问题是它执行了不必要的视图更新,因为数组被标记为 @Published。
我在寻找什么: 理想的方法是流式设置,我可以在其中获取所有事件(以批处理方式),但 sink 应该在最后一个事件之后等待 1.5 秒已添加事件。
我尝试了PassthroughSubject,但它似乎只能让我知道最后 1.5 秒内发生的最后一个事件。
【问题讨论】: