具有不同值的同一类对象作为数据源传递时,为什么不重新传递视图?

在探索Swiftui,遇到了一些我不太明白的事情。

我已经创建了一个容器视图,它可以获取显示时的数据,如本文所述,但是我不完全更改呈现视图中引用的对象,而只是加载它的一些属性。

加载器是容器视图观察到的可观察对象。当加载程序指示其值已更改时,容器视图将重新加载其Body属性并用新数据显示呈现视图。但是,当需要加载的对象是类时,并非Body属性中的所有子视图都会重新加载。

当加载程序加载了对象的属性后,它会再次用该对象调用传递的@viewbuilder闭包,但现在它的属性被加载。

如果添加print语句,我会清楚地看到所包含的@viewbuilder闭包被调用两次:一次使用卸载的对象,一次使用加载的对象。这些是同一个对象,但第二次加载了属性。

文本标签(1)已正确更新,从“文本正在等待…”更改为实际标题,但对象呈现视图(2)不会更新其子视图。

使用新数据调用ObjectRenderingView的init,但从未访问Body属性。这向我表明,Swiftui认为数据没有更改,不需要重新发送。

我想我理解为什么它不起作用:obj的身份没有改变,所以swiftui认为不需要重新加载objecrenderingview。由于obj.title值的标识已从nil更改为实际标题,因此文本视图将重新加载。我无法理解的是如何让Swiftui重新加载ObjectRenderingView。

如果值不是值语义,则未指定使用结果绑定的任何视图的更新行为。

猜你喜欢

转载自www.cnblogs.com/gamecenter/p/11291241.html