在SwiftUI中使用 @EnvironmentObject来在视图之间共享数据,可以通过以下步骤实现:
- 在应用程序中定义一个ObservableObject类型的类。
class UserData: ObservableObject {
@Published var name = "John"
}
- 在SceneDelegate中创建并注入该类的实例,使其可以在整个应用程序中使用。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let userData = UserData()
let contentView = ContentView().environmentObject(userData)
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView)
self.window = window
window.makeKeyAndVisible()
}
}
- 在需要访问共享数据的视图中使用@EnvironmentObject属性包装器来创建一个引用并使用。
struct ProfileView: View {
@EnvironmentObject var userData: UserData
var body: some View {
VStack {
Text("Name: \(userData.name)")
}
}
}
这样就可以在不同的视图中使用userData实例来访问、更改和共享数据。注意:在使用@EnvironmentObject时,先在某个父视图中注入该对象,然后在子视图中访问该对象。如果没有先注入,则会发生运行时错误。