SwiftUI如何使用 @EnvironmentObject 在视图之间共享数据? 代码演示

7 min read

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,都将反映在另一个视图中。