让我们考虑最基本的可用流程之一,其中您有一个 View ,其中的数据是使用其他辅助 View 填充的。即设置。
在 Settings
查看我们显示了 2 个项目:
SETTINGS
A - Pick a Color
B - Pick a Country
当用户点击其中一个项目时,应用程序将显示一个可用于选择颜色的新 View 或可用于选择国家/地区的另一个 View 。
当用户完成选择 View 之一时,Selection View
关闭并且选择被传回 Settings
现在显示新信息的 View :
SETTINGS
A - Green
B - Spain
与 delegates
和protocols
我们可以轻松地实现此代码,只需将 Settings
查看 Colors
的代表和 Countries
查看并实现直接在Settings
上接收用户选择的具体方法看法。
我们如何才能实现与 SwiftUI
相同的流程?
我正在阅读 @EnvironmentObject
,这是 @EnvironmentObject
的情况吗?会工作?您将如何使用 @EnvironmentObject
来实现上述情况?
注意:我见过其他类似的问题,但它们对于单个案例来说过于具体。我的问题很广泛,应该普遍适用于许多不同的情况。
最佳答案
我发现一个可能的解决方案(而不是使用 @EnvironmentObject
)是使用 @Binding
。
对于设置 View 我可以有 selectedColor
和selectedCountry
如@State
@State private var selectedColor:String = ""
@State private var selectedCountry:String = ""
让我们实现颜色选择 View 。我可以设置一个bind
到 color
这样变量:
@Binding var myColor:String = ""
现在如果 myColor
的值更改,由于该变量是绑定(bind),因此引用该变量的 View (在本例中为设置 View )也会更改
从设置 View 中,在呈现color view
时设置绑定(bind)就足够了。 。
NavigationLink(destination: ColorView(myColor: self.$selectedColor)) {
在我看来,这是替代 Delegate
的好方法。逻辑。
关于SwiftUI:什么替代了委托(delegate)协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59580984/