ios - 如何在 SwiftUI 中创建单个 EnvironmentObject 实例
问题描述
我通常像这样创建 EnvironmentObject
class UserSettings: ObservableObject {
@Published var obsValue1 = false
@Published var obsValue2 = true
}
并将其用于大量视图
struct Example1: View {
@EnvironmentObject var settings: UserSettings
//...
}
struct Example3: View {
@EnvironmentObject var settings: UserSettings
//...
}
struct Example3: View {
@EnvironmentObject var settings: UserSettings
//...
}
是否有任何好的做法来创建 EnvironmentObject 的单个成员并通过应用程序使用它?
解决方案
这是一次创建的演示 - 随处使用
struct DemoView: View {
var userSettings = UserSettings() // one instance
var body: some View {
VStack {
Text("Value: " + String(describing: userSettings.obsValue1)) // << usage
Example2()
}.environmentObject(userSettings) // << injected into all subviews !!
}
}
struct Example1: View {
// @EnvironmentObject var settings: UserSettings // not needed as not used
// passed below automatically
var body: some View {
VStack {
Example2()
}
}
}
struct Example2: View {
@EnvironmentObject var settings: UserSettings
var body: some View {
VStack {
Text("Value2: " + String(describing: settings.obsValue1)) // << usage
Example3()
}
}
}
struct Example3: View {
@EnvironmentObject var settings: UserSettings
var body: some View {
Text("Value3: " + String(describing: settings.obsValue1)) // << usage
}
}
推荐阅读
- javascript - cell.clearValidation() 在制表器中不起作用
- github - 如何在 GitHub 上设置存储库描述?(2020)
- kubernetes - PromQL - 命令在 pod 上运行时发出警报
- python - tensorflow 2 从顺序到功能
- node.js - 我想将电话号码用作静态而不是由 socket.io lib 生成的动态套接字 ID
- python - 该非线性系统的相图
- jmeter - 如何使用 Jmeter 在循环中运行 2 个线程组?
- vba - 如何修复 Form.Recordset 中的“无当前记录”-错误?
- arrays - for ... in 循环是否遍历序列的副本?
- php - Sylius - Shop Api - 当 shop API 运行时发生错误找不到模板“”