SwiftUI:什么替代了委托(delegate)协议(protocol)?

标签 swift architecture swiftui

让我们考虑最基本的可用流程之一,其中您有一个 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

delegatesprotocols我们可以轻松地实现此代码,只需将 Settings查看 Colors 的代表和 Countries查看并实现直接在Settings上接收用户选择的具体方法看法。

我们如何才能实现与 SwiftUI 相同的流程? 我正在阅读 @EnvironmentObject ,这是 @EnvironmentObject 的情况吗?会工作?您将如何使用 @EnvironmentObject 来实现上述情况?

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

最佳答案

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

对于设置 View 我可以有 selectedColorselectedCountry@State

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

让我们实现颜色选择 View 。我可以设置一个bindcolor这样变量:

@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/

相关文章:

swift MMDrawerController : want to change rootViewController

ios - 在具有自动尺寸的分组 tableView 中显示页眉而不是页脚

architecture - 可以使用 REST 设计 SOA 吗?

ios - 组合:监听内部集合变化

swift - 将 Binding<Int> 与 TextField SwiftUI 一起使用

swiftui - 在列表中同时迭代两个数组

ios - 如何制作用于录制语音的视觉弹跳圈

ios - 如何将google标签管理器SDK安装到swift项目中

C#:继承、覆盖和隐藏

PHP OO - 如何初始化您的业务对象?