SwiftUI

SwiftUI中@EnvironmentObject的使用

2024-02-05  本文已影响0人  喔牛慢慢爬

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

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

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

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

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

struct ContentView: View {
    @EnvironmentObject var userSettings: UserSettings
    var body: some View {
        VStack {
            Text("Hello, \(userSettings.userName)!")
        }
    }
}
// 如果 ContentView 从其他地方被引用,请确保环境对象已传入:
ContentView().environmentObject(UserSettings())
通过这种方式,你可以在多个视图间轻松共享和管理全局状态,并且随着状态的变化自动更新关联的视图。
  1. @EnvironmentObject 允许你在整个视图层级中传递和共享一个遵循 ObservableObject 协议的对象,而不需要通过视图之间的层层传递。
  2. 只要对象在视图层次结构的某个顶级位置被设置到环境中,那么任何子视图都可以通过 @EnvironmentObject 访问到该对象,并对其中@Published 属性的变化做出响应。
  3. 生命周期:环境对象的存在期一般比单个视图更长,可以通过 SceneDelegate 或者 App 结构体中的 .environmentObject(_:) 方法注入到应用的全局环境中。当不再需要环境对象时,应在其所在的场景(如窗口)被销毁前显式地移除它。
上一篇下一篇

猜你喜欢

热点阅读