我附上了一张照片。请看。
据我所知,“视图”只是视图,而不是控制器。所以我像方法1一样开发。但我面临一个问题,我如何在另一个可观察对象中使用可观察对象?
我想如果我用observableobject传递一个参数,问题就会解决。但是我认为这是不好的方法。
所以我想到了方法2。但是方法是“视图”不仅仅是视图。它是视图和控制器。
所以我搞不清这条路是不是坏的。
哪种方式是好的方式?我想知道其他SwiftUI开发人员如何开发这种情况。
如果你认为有比方法1和方法2更好的方法,请给我建议。
摘要
问题1.方式1-我怎样在另一个可观察对象中使用可观察对象?(单音?类似静态共享)
Q2. Way 2-方向是否正确?(视图=视图+控制器)
Q3.您的建议。
环境
xcode 14.2
斯威夫特5.7.2
2条答案
按热度按时间iszxjhcz1#
下面是您的问题的示例代码:
ObservableObjects
主要用于视图嵌套的情况ffdz8vbo2#
SwiftUI是一个新的架构,旧的设计模式并不适合。在SwiftUI中,
View
结构体不是MVC意义上的视图。该视图层(例如,UIView/NSView对象)是基于View
结构体的差异自动生成的,这些结构体是超快速高效的值类型。视图状态保存在@State
之类的属性 Package 器中,这实质上使值的行为类似于对象,例如,它有一个“内存”。您可以将其作为let
(用于读访问)或@Binding var
(用于写访问)向下传递到子视图,SwiftUI将跟踪依赖关系,并在必要时在受影响的View
结构上调用body
。通常在SwiftUI中,我们只有一个
ObservableObject
,用于保存@Published
属性中的模型结构。通常有2个单例,一个shared
从磁盘加载,另一个preview
预加载了用于驱动SwiftUI预览的测试数据。此对象使用.environmentObject
在View结构之间共享如果您尝试使用多个
ObservableObject
而不是@State
来处理视图数据,您将遇到主要问题,实际上是SwiftUI使用值类型旨在消除的那种一致性问题。