SwiftUI 中的 @EnvironmentObject 属性包装器可用于在视图之间共享数据。它常用于管理应用的全局状态。
以下是演示如何在视图之间共享 @EnvironmentObject 的代码:
首先,定义一个 ObservableObject 类型的全局数据:
class UserData: ObservableObject {
@Published var score = 0
}
然后,在你的 App 中,将该数据作为环境对象添加到视图中:
@main
struct MyApp: App {
let userData = UserData()
var body: some Scene {
WindowGroup {
ContentView().environmentObject(userData)
}
}
}
现在,你可以在任何视图中获取该数据并使用它:
struct ContentView: View {
@EnvironmentObject var userData: UserData
var body: some View {
VStack {
Text("Score: \(userData.score)")
Button("Increase Score") {
userData.score += 1
}
NavigationLink(destination: DetailView()) {
Text("Go to Detail View")
}
}
}
}
struct DetailView: View {
@EnvironmentObject var userData: UserData
var body: some View {
VStack {
Text("Score: \(userData.score)")
}
}
}
在 ContentView 和 DetailView 中,通过使用 @EnvironmentObject 属性包装器,可以轻松地访问并共享 userData 对象。无论修改子视图还是父视图中的 userData,都将反映在另一个视图中。