在Swift中使用@Observable属性包装器,可以实现在ObservedObject对象中使用计时器定期刷新数据。下面是具体的步骤:
class MyViewModel: ObservableObject {
@Published var data: String = ""
}
struct MyView: View {
@ObservedObject var viewModel = MyViewModel()
var body: some View {
Text(viewModel.data)
}
}
struct MyView: View {
@ObservedObject var viewModel = MyViewModel()
var timer: Timer?
init() {
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
// 更新ObservedObject对象的属性
viewModel.data = "Updated data"
}
}
var body: some View {
Text(viewModel.data)
}
}
这样,每隔1秒钟,ObservedObject对象的data属性都会被更新,并且视图会自动刷新显示最新的数据。
需要注意的是,为了避免内存泄漏,记得在适当的时候停止计时器,比如在视图销毁时停止计时器:
struct MyView: View {
@ObservedObject var viewModel = MyViewModel()
var timer: Timer?
init() {
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
// 更新ObservedObject对象的属性
viewModel.data = "Updated data"
}
}
var body: some View {
Text(viewModel.data)
}
// 在视图销毁时停止计时器
func stopTimer() {
timer?.invalidate()
timer = nil
}
// 在视图销毁时调用停止计时器的方法
deinit {
stopTimer()
}
}
这样就完成了在Swift中使用@Observable属性和计时器定期刷新ObservedObject的操作。
领取专属 10元无门槛券
手把手带您无忧上云