import SwiftUI
class ViewModel:ObservableObject{
@Published var test = false
var timer:Timer!
init(){
}
func loadTimer(){
timer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in
self.test = false
}
}
}
struct ContentView: View {
@StateObject var viewModel = ViewModel()
var body: some View {
let _ = Self._printChanges()
VStack {
Text("Hello, world!")
}
.onAppear{
viewModel.loadTimer()
}
.padding()
}
}
在这段代码中,我只是不断将
test
设置为 false,即使没有任何变化,它也会不断重新渲染自身。
会导致性能问题吗?如果是这样,如何阻止 swiftui 视图重新渲染?
我发现
@Observerable
可能有帮助,但它仅在 iOS 17 中可用。
您可以使用
TimelineView
https://developer.apple.com/documentation/swiftui/timelineview
概述 时间轴视图充当容器,没有其外观 自己的。相反,它会在预定点重新绘制其包含的内容 及时。例如,您可以更新模拟计时器的表面一次 每秒:
TimelineView(.periodic(from: startDate, by: 1)) { context in AnalogTimerView(date: context.date) }