如何在使用 ObservableObject 时避免 SwiftUI 不必要的刷新

问题描述 投票:0回答:1
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 中可用。

ios swift xcode swiftui
1个回答
0
投票

您可以使用

TimelineView

https://developer.apple.com/documentation/swiftui/timelineview

概述 时间轴视图充当容器,没有其外观 自己的。相反,它会在预定点重新绘制其包含的内容 及时。例如,您可以更新模拟计时器的表面一次 每秒:

TimelineView(.periodic(from: startDate, by: 1)) { context in AnalogTimerView(date: context.date) }

© www.soinside.com 2019 - 2024. All rights reserved.