美文网首页
SwiftUI中@EnvironmentObject的使用

SwiftUI中@EnvironmentObject的使用

作者: _VisitorsZsl | 来源:发表于2024-03-05 10:14 被阅读0次

\color{red}{@EnvironmentObject} 是SwiftUI中的一个属性包装器,用于在整个视图层级中传递和共享一个遵循 \color{red}{ObservableObject} 协议的对象。这个对象的任何属性如果使用了 \color{red}{@Published}标注,则当这些属性值发生变化时,所有依赖于该对象的视图都会收到通知并重新渲染。

要使用 \color{red}{@ EnvironmentObject},首先需要创建一个遵循 \color{red}{ObservableObject} 的类,并在其中定义需要响应式更新的属性:

 class UserSettings: ObservableObject {
@Published var userName: String = "John Doe"
// 其他可响应变化的属性...
}

然后,在应用启动的地方(如:SceneDelegate 对于 iOS 或者 macOS 应用),将 UserSettings实例添加到环境对象中:

// 在 SceneDelegate.swift 中(iOS)
let _userSettings = UserSettings()
scene.environmentObject(_userSettings)

接着,在需要访问此环境对象的视图中使用 \color{red}{@ EnvironmentObject} 注解:

struct ContentView: View {
 @EnvironmentObject var userSettings: UserSettings
var body: some View {
    VStack {
        Text("Hello, \(userSettings.userName)!")
     }
   }
}
// 如果 ContentView 从其他地方被引用,请确保环境对象已传入:
ContentView().environmentObject(UserSettings())
通过这种方式,你可以在多个视图间轻松共享和管理全局状态,并    且随着状态的变化自动更新关联的视图。

总结
\color{red}{@ EnvironmentObject} 允许你在整个视图层级中传递和共享一个遵循 \color{red}{@ ObservableObject}协议的对象,而不需要通过视图之间的层层传递。
只要对象在视图层次结构的某个顶级位置被设置到环境中,那么任何子视图都可以通过 \color{red}{@ EnvironmentObject} 访问到该对象,并对其中\color{red}{@ Published}属性的变化做出响应。
生命周期:环境对象的存在期一般比单个视图更长,可以通过 SceneDelegate 或者 App 结构体中的\color{red}{@ .environmentObject(_:) } 方法注入到应用的全局环境中。当不再需要环境对象时,应在其所在的场景(如窗口)被销毁前显式地移除它。

相关文章

网友评论

      本文标题:SwiftUI中@EnvironmentObject的使用

      本文链接:https://www.haomeiwen.com/subject/hufdzdtx.html