让我们考虑一种可用的最基本的流程,在该流程中,您有一个视图,其中包含使用其他辅助视图填充的数据。即设置。
在Settings
视图中,我们显示了2个项目:
SETTINGS
A - Pick a Color
B - Pick a Country
当用户点击其中一个项目时,该应用程序将显示一个可用于选择颜色的新视图或一个可用于选择国家/地区的视图。
当用户完成一个选择视图的操作后,
Selection View
将关闭,选择内容将传递回Settings
视图,该视图现在显示新信息:SETTINGS
A - Green
B - Spain
使用
delegates
和protocols
我们可以轻松地实现此代码,只需将Settings
视图作为Colors
和Countries
视图的委托,并实现特定的方法以直接在Settings
视图上接收用户选择。SwiftUI
如何实现相同的流程?我正在阅读有关
@EnvironmentObject
的情况,这是@EnvironmentObject
可行的情况吗?您如何用@EnvironmentObject
实现上述情况?注意:我见过其他类似的问题,但是它们对于单个案例而言太具体了。我的问题很广泛,应该普遍适用于许多不同的情况。
最佳答案
我发现一种可能的解决方案(而不是使用@EnvironmentObject
)将是使用@Binding
。
对于设置视图,我可以将selectedColor
和selectedCountry
设置为@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
逻辑的好方法。