0

我在 @ObservableObject 类中使用 @EnvironmentObject 时遇到问题。根据一些研究,这是不可能的,因为 EnvironmentObject 仅用于视图。

我已采取以下措施,但该值不会动态更新。

例如,它是用“A”的值初始化的,但是当我在使用 EnvironmentObject 的类中更改值时,在我的 ObservableObject 类中找到的值仍然是“A”。它在使用@EnvironmentObject 的所有其他位置更新,而不是 ObservableObject API 类。

当 EnvironmentObject 更新发布的变量时,有没有办法让 ObservableObject API 类中的代码更新?

需要在其中像 EnvironmentObject 一样操作的变量的类是 API 类。

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
}

我在这里到底做错了什么?

4

1 回答 1

1

您正在初始化您的课程的不同版本。尝试public static let shared = SelectedStation()像这样添加:

class SelectedStation: ObservableObject {
    @Published var selectedStation: String = "A"
    public static let shared = SelectedStation()
}

然后在需要使用它的地方,将其声明为:

var selectedStation = SelectedStation.shared

此外,您应该将 @Published var 重命名为 selectedStation 以外的名称,否则您可能会不幸selectedStation.selectedStation地遇到对该变量的引用。

最后,记住@Environment需要用 初始化,SelectedStation.shared所以所有东西都共享一个类的实例化。

于 2021-07-25T22:18:37.880 回答