Ios 为什么@EnvironmentObject强制重新初始化视图?

Ios 为什么@EnvironmentObject强制重新初始化视图?,ios,swift,xcode,swiftui,Ios,Swift,Xcode,Swiftui,在本例中,当我在屏幕上拖动时,LabelViewRepresentable为什么会在每次“updateUIView”调用之前重新初始化?如果我将计数器设置为@State属性而不是@EnvironmentObject属性,那么它只会像我预期的那样初始化一次 导入快捷界面 类计数器:ObserveObject{ @已发布变量计数=0 } 结构反视图:视图{ @环境对象变量计数器:计数器 var body:一些观点{ LabelViewRepresentable(计数:$counter.count)

在本例中,当我在屏幕上拖动时,
LabelViewRepresentable
为什么会在每次“updateUIView”调用之前重新初始化?如果我将计数器设置为
@State
属性而不是
@EnvironmentObject
属性,那么它只会像我预期的那样初始化一次

导入快捷界面
类计数器:ObserveObject{
@已发布变量计数=0
}
结构反视图:视图{
@环境对象变量计数器:计数器
var body:一些观点{
LabelViewRepresentable(计数:$counter.count)
.手势(DragGesture().onChanged({in
self.counter.count+=1
}))
}
}
结构LabelViewRepresentable:UIViewRepresentable{
@绑定变量计数:Int
私有变量视图:UILabel
初始化(计数:绑定){
打印(“初始化”)
let label=UILabel()
label.text=“0”
self.view=标签
自计数=计数
}
func makeUIView(上下文:UIViewRepresentableContext)->UILabel{
打印(“makeUIView”)
返回视图
}
func updateUIView(uiView:UILabel,context:UIViewRepresentableContext){
打印(“更新视图”)
view.text=“\(计数)”
}
}

当您查看关于EnvironmentObject的Apple文档时,您会发现:

一种动态视图属性,它使用由 祖先视图,使当前视图在可绑定 对象更改

这意味着每当EnvironmentObject更改时,依赖它的所有视图都会重新初始化和重新绘制

它与State的工作原理略有不同,在Apple docs中描述如下:

给定类型的持久值,视图通过该值读取和 监视值


当状态更改时,视图无法重新初始化,因为状态值将被丢弃。受状态影响的零件将被重新绘制。另一方面,将状态值作为绑定传入的视图的任何子级都将重新初始化。

这取决于如何调用CounterView()。谢谢!我想这就解释了为什么在
UIViewRepresentable
中需要
协调器。我在
UIViewRepresentable
上存储了一些属性,这些属性由于重新初始化而被重置,因此我将它们移动到协调器,它似乎在视图更新过程中保持不变。