我只是想将两个环境对象传递给一个视图,它们是同一类的不同实例。我觉得我忽略了一些事情,因为这看起来很简单。
最明显的方法是按照通常的方式进行(如果它们是不同类的实例,则有效),如下所示:
俯视图:
exampleView()
.environmentObject(vm1)
.environmentObject(vm2)
子视图:
struct exampleView: View {
@EnvironmentObject var vm1: ViewModel
@EnvironmentObject var vm2: ViewModel
var body: some View {
...
}
}
但这不起作用,因为视图会将
vm1
和 vm2
设置为原始 vm1
。
我到处搜索,但除了使用单个类并更改该类的属性(例如从“property”到“property1”和“property2”)之外,找不到任何解决方案。这不仅是相当难看的代码,而且在我的情况下也是不可能的。
为什么?我正在从事的项目相当大,我无法访问某些代码。初始化两次的类拥有一个数组,该数组的填充方式不同,具体取决于其他因素。在视图中,某些部分被重用,因为数组具有相同类型的项目,但填充了不同的内容。
如果这对于 Swift UI 来说确实是错误的,请告诉我。我必须重做很多,但从表面上看,这似乎是一个相当简单的问题,所以我希望得到可以保留班级结构的答案。
好吧,你不能创建一个 [ViewModel] 类型的 env obj,将两个虚拟机传递到一个对象中,然后访问它吗?