在swiftui中如何限制对stateobject的更改



我有一个视图执行昂贵的更新,所以我想节流它们:

目前我的观点是这样的:

struct CodeGenerationView: View {
@StateObject var root: RootState
var body: some View {
Text(CodeGenerator.generate(root: root))
}
}

在每次更新时调用。

我想限制更改,每秒只更新一次

这可能吗?

如果您可以将代码生成移动到ObservableObject本身,那将是最简单的:

class RootState : ObservableObject {
@Published var result : String = ""

private var cancellables = Set<AnyCancellable>()

init() {
Timer.publish(every: 1, on: .main, in: .default)
.autoconnect()
.sink { (_) in
//perform some expensive calculation here
self.result = "(Date().timeIntervalSince1970)"
}
.store(in: &cancellables)
}
}
struct CodeGenerationView: View {
@StateObject var root: RootState
var body: some View {
Text(root.result)
}
}

注意,我使用Combine来连接计时器发布者。如果由于某些原因,您无法在RootState内生成代码,那么使用Combine将publisher连接在一起可能是一种可行的方法。在这种情况下,您几乎肯定不需要它,但甚至有一个throttle方法:https://developer.apple.com/documentation/combine/fail/throttle(for:scheduler:latest:)

相关内容

  • 没有找到相关文章

最新更新