在SwiftUI中,可以使用EnvironmentObject来在App重新启动后更新视图。EnvironmentObject是一种特殊类型的ObservableObject,它可以在整个应用程序中共享数据。以下是一个包含代码示例的解决方法:
首先,创建一个ObservableObject类,用于管理要共享的数据。例如,我们可以创建一个名为AppState的类:
import SwiftUI
class AppState: ObservableObject {
@Published var counter: Int = 0
}
接下来,在App的入口文件中,创建一个EnvironmentObject并将其注入到App的主视图中。例如,我们可以在ContentView中使用之前创建的AppState:
import SwiftUI
@main
struct MyApp: App {
@StateObject private var appState = AppState()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(appState)
}
}
}
然后,在视图中使用@EnvironmentObject属性包装器来引用共享的数据,并在需要时更新视图。例如,我们可以在ContentView中使用appState对象:
import SwiftUI
struct ContentView: View {
@EnvironmentObject private var appState: AppState
var body: some View {
VStack {
Text("Counter: \(appState.counter)")
Button(action: {
appState.counter += 1
}, label: {
Text("Increment")
})
}
}
}
现在,无论何时重新启动应用程序,AppState的counter属性都将被正确更新,并且视图将自动刷新以反映这些更改。
请注意,为了使EnvironmentObject起作用,必须使用@EnvironmentObject属性包装器将其注入到视图中,并且它必须在App的顶级视图中进行注入。此外,使用@EnvironmentObject属性包装器的视图必须在其生命周期内保持活动状态。
希望这可以帮助你解决问题!