在没有收到更多事件后将 @Published var 设置为 nil

Setting an @Published var to nil after no more events are received

考虑以下代码:

class MyController: NSObject, ObservableObject {

    //...

    @Published var myRapidlyChangingVar: MyEnum? = nil

    //...

    func calledAtHighFrequencyByExternalEvents(value: MyEnum) {
        myRapidlyChangingVar = value
    }
}

如果 1 秒内没有调用 calledAtHighFrequencyByExternalEvents(),则 myRapidlyChangingVar 的值需要设置为 nil

实现此目标最简单、最干净的方法是什么?

让我印象深刻的是反应式编程应该使之变得非常简单,但不确定从哪里开始或要搜索什么。

您可以使用 debounce(for:scheduler:options:)

轻松实现此目的
let cancellable = myRapidlyChangingVar
    .compactMap { [=10=] }
    .debounce(for: .seconds(1), scheduler: DispatchQueue.main)
    .sink { [weak self] _ in self?.myRapidlyChangingVar = nil }
}

Debounce 有一个非常相似的兄弟throttle(for:scheduler:latest:)

您可以在 this blogpost 中阅读更多关于两者的信息。