6
SwiftUI-如何避免将导航硬编码到视图中?
我尝试为更大的,可投入生产的SwiftUI App做架构。我一直在遇到一个相同的问题,这表明SwiftUI的一个主要设计缺陷。 仍然没有人能给我完整的工作,生产就绪的答案。 如何在SwiftUI其中包含导航的可重用视图? 由于SwiftUI NavigationLink牢固地绑定在视图上,因此根本不可能在较大的Apps中进行缩放。NavigationLink是的,在这些小样本应用程序中可以工作-是的,但是当您要在一个应用程序中重用许多视图时就不会立即使用。并且可能还会在模块边界上重用。(例如:在iOS,WatchOS等中重用View) 设计问题:NavigationLinks硬编码到视图中。 NavigationLink(destination: MyCustomView(item: item)) 但是,如果包含此视图的视图NavigationLink应该可重用,则无法对目的地进行硬编码。必须有一种提供目的地的机制。我在这里问这个问题,得到了很好的答案,但仍然没有完整的答案: SwiftUI MVVM协调器/路由器/ NavigationLink 想法是将目标链接注入到可重用视图中。通常,此想法可行,但不幸的是,这并不适合实际的Production Apps。一旦有了多个可重复使用的屏幕,我就会遇到一个逻辑问题,即一个可重复使用的视图(ViewA)需要一个预先配置的视图目标(ViewB)。但是,如果ViewB还需要预配置的视图目标该ViewC怎么办?我需要建立ViewB在这样的方式已经ViewC被注入已经ViewB在我注入ViewB到ViewA。依此类推....但是由于当时必须传递的数据不可用,整个构造失败了。 我的另一个想法是使用Environmentas依赖项注入机制为注入目标NavigationLink。但是我认为,这或多或少应被视为一种骇客行为,而不是针对大型应用程序的可扩展解决方案。我们最终将基本上将环境用于所有内容。但是因为Environment也只能在View内部使用(不能在单独的Coordinators或ViewModels中使用),所以我认为这将再次创建奇怪的构造。 就像业务逻辑(例如,视图模型代码)和视图一样,导航和视图也必须分开(例如,协调器模式)。UIKit这是有可能的,因为我们可以访问视图UIViewController并UINavigationController在视图后方进行访问。UIKit'sMVC已经存在一个问题,即它混和了许多概念,因此变成了有趣的名称“ Massive-View-Controller”而不是“ Model-View-Controller”。现在,类似的问题仍在继续,SwiftUI但在我看来甚至更糟。导航和视图是紧密耦合的,不能分离。因此,如果包含导航,则无法进行可重用的视图。可以解决这个问题,UIKit但是现在我看不到一个理智的解决方案SwiftUI。不幸的是,Apple没有向我们提供如何解决类似架构问题的解释。我们只有一些小示例应用程序。 我希望证明自己是错误的。请给我展示一个干净的App设计模式,该模式可以解决大量生产就绪的Apps的问题。 提前致谢。 更新:悬赏活动将在几分钟后结束,很遗憾,仍然没有人能够提供有效的示例。但是,如果找不到其他解决方案并将其链接到此处,我将开始提供新的赏金来解决此问题。感谢大家的巨大贡献!