下面是一个简单的演示代码:
首先,我们需要创建一个 ObservableObject
类,使用 @Published
特性来发布数据变化:
class UserData: ObservableObject {
@Published var name = "John"
@Published var age = 25
}
然后,在需要共享数据的视图上,使用 @EnvironmentObject
来获取 UserData
实例:
struct ContentView: View {
@EnvironmentObject var userData: UserData
var body: some View {
VStack {
Text(userData.name)
Text("\(userData.age) years old")
}
}
}
在 SceneDelegate
中,我们需要将 UserData
实例添加到环境中:
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
let userData = UserData()
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let contentView = ContentView().environmentObject(userData)
// ... 省略其他代码
}
}
这样,我们就可以在视图之间共享数据了。在另一个视图中也可以使用 @EnvironmentObject
来获取 UserData
实例并显示数据。数据的改变会自动更新到所有订阅这个实例的视图。