美文网首页
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