让我们考虑一种可用的最基本的流程,在该流程中,您有一个视图,其中包含使用其他辅助视图填充的数据。即设置。

Settings视图中,我们显示了2个项目:

SETTINGS
A - Pick a Color
B - Pick a Country


当用户点击其中一个项目时,该应用程序将显示一个可用于选择颜色的新视图或一个可用于选择国家/地区的视图。

当用户完成一个选择视图的操作后,Selection View将关闭,选择内容将传递回Settings视图,该视图现在显示新信息:

SETTINGS
A - Green
B - Spain


使用delegatesprotocols我们可以轻松地实现此代码,只需将Settings视图作为ColorsCountries视图的委托,并实现特定的方法以直接在Settings视图上接收用户选择。

SwiftUI如何实现相同的流程?
我正在阅读有关@EnvironmentObject的情况,这是@EnvironmentObject可行的情况吗?您如何用@EnvironmentObject实现上述情况?

注意:我见过其他类似的问题,但是它们对于单个案例而言太具体了。我的问题很广泛,应该普遍适用于许多不同的情况。

最佳答案

我发现一种可能的解决方案(而不是使用@EnvironmentObject)将是使用@Binding

对于设置视图,我可以将selectedColorselectedCountry设置为@State

@State private var selectedColor:String = ""
@State private var selectedCountry:String = ""


让我们实现颜色选择视图。我可以通过以下方式将bind设置为color变量:

@Binding var myColor:String = ""


现在,如果myColor的值更改,由于变量是Bind,因此对于引用了该变量的视图(在这种情况下,是“设置”视图),它也将更改。

从“设置”视图中,在显示color view时设置绑定就足够了。

NavigationLink(destination: ColorView(myColor: self.$selectedColor)) {


我认为这将是替代Delegate逻辑的好方法。

10-07 19:56