SwiftUI 从另一个视图更改观察到的对象

Posted

技术标签:

【中文标题】SwiftUI 从另一个视图更改观察到的对象【英文标题】:SwiftUI Change Observed Object From Another View 【发布时间】:2021-06-30 15:54:37 【问题描述】:

我的 ContentView 中有一个观察到的对象,其中包含选项卡视图。

class GlobalValue: ObservableObject 
  @Published var stringValue = ""
  @Published var intValue = 0


struct ContentView: View 
    @ObservedObject var globalValue = GlobalValue()

我需要从其中一个选项卡中更改 ContentView 的观察对象值。

ContentView().globalValue.intValue=25

它没有改变值。如何更改观察到的对象值?谢谢...

【问题讨论】:

这个ContentView() 你正在创建一个新的视图对象。你必须使用环境对象。 这能回答你的问题吗? Using @State variable does not work for changing view state in Body from child view 你可以参考这里:***.com/a/65940114/14733292 见第二个方法 【参考方案1】:

它正在改变价值。问题是您在结构中本地实例化 GlobalValue 的实例。它在结构之外没有生命。我想将Observable Object 用作这样的全局存储,您需要创建一次并使用该实例。

最简单的方法是添加 static let shared = GlobalValue() 在你的班级和你的结构中使用 globalValue = GlobalValue.shared 这基本上给了你一个单例。您将拥有一个所有视图都可以读取和写入的实例。

【讨论】:

以上是关于SwiftUI 从另一个视图更改观察到的对象的主要内容,如果未能解决你的问题,请参考以下文章

已发布/观察到的 var 在视图 swiftui 中未更新,带有调用函数

当从另一个 ObservedObject 链接到 Published 属性时,视图不会对更改做出反应

在 SwiftUI 中使用可观察对象切换视图

SwiftUI 如何根据获取的数据更改视图的背景颜色?

SwiftUI |从另一个 SwiftUI 视图访问 PickerView 选择

从另一个视图 SwiftUI 修改视图时出错