SwiftUI - 在 ObservableObject Class/Dependency 注入中使用 EnvironmentObject
SwiftUI - Use EnvironmentObject in ObservableObject Class/Dependency Injection
我在使用@ObservableObject 中的@EnvironmentObject 时遇到问题class。根据一些研究,这是不可能的,因为 EnvironmentObject 仅用于视图。
我已采取以下措施,但该值并未动态更新。
例如,它用值“A”初始化,但是当我更改使用 EnvironmentObject 的 class 中的值时,在我的 ObservableObject class 中找到的值仍然是“一个”。它在所有其他使用@EnvironmentObject 的位置更新,而不是 ObservableObject API class.
有没有办法在 EnvironmentObject 更新发布的变量时更新 ObservableObject API class 中的代码?
需要像 EnvironmentObject 一样操作的变量的 class 是 API class.
class SelectedStation: ObservableObject {
@Published var selectedStation: String = "A"
}
class API: ObservableObject {
var selectedStation: SelectedStation
init(selectedStation: SelectedStation) {
self.selectedStation = selectedStation
print(selectedStation.selectedStation)
}
///some code that will utilize the selectedStation variable
}
我到底做错了什么?
您正在初始化 class 的不同版本。尝试像这样添加 public static let shared = SelectedStation()
:
class SelectedStation: ObservableObject {
@Published var selectedStation: String = "A"
public static let shared = SelectedStation()
}
然后在需要使用的地方声明为:
var selectedStation = SelectedStation.shared
此外,您应该将 @Published 变量重命名为 selectedStation 以外的其他名称,否则您可能 运行 进入不幸的 selectedStation.selectedStation
作为对该变量的引用。
最后,请记住 @Environment
需要用 SelectedStation.shared
初始化,所以所有东西都共享 class.
的一个实例
我在使用@ObservableObject 中的@EnvironmentObject 时遇到问题class。根据一些研究,这是不可能的,因为 EnvironmentObject 仅用于视图。
我已采取以下措施,但该值并未动态更新。
例如,它用值“A”初始化,但是当我更改使用 EnvironmentObject 的 class 中的值时,在我的 ObservableObject class 中找到的值仍然是“一个”。它在所有其他使用@EnvironmentObject 的位置更新,而不是 ObservableObject API class.
有没有办法在 EnvironmentObject 更新发布的变量时更新 ObservableObject API class 中的代码?
需要像 EnvironmentObject 一样操作的变量的 class 是 API class.
class SelectedStation: ObservableObject {
@Published var selectedStation: String = "A"
}
class API: ObservableObject {
var selectedStation: SelectedStation
init(selectedStation: SelectedStation) {
self.selectedStation = selectedStation
print(selectedStation.selectedStation)
}
///some code that will utilize the selectedStation variable
}
我到底做错了什么?
您正在初始化 class 的不同版本。尝试像这样添加 public static let shared = SelectedStation()
:
class SelectedStation: ObservableObject {
@Published var selectedStation: String = "A"
public static let shared = SelectedStation()
}
然后在需要使用的地方声明为:
var selectedStation = SelectedStation.shared
此外,您应该将 @Published 变量重命名为 selectedStation 以外的其他名称,否则您可能 运行 进入不幸的 selectedStation.selectedStation
作为对该变量的引用。
最后,请记住 @Environment
需要用 SelectedStation.shared
初始化,所以所有东西都共享 class.