SwiftUI 中有控制器吗?

Bla*_*olf 13 architecture ios swift watchos swiftui

我现在正在尝试进入 SwiftUI,但正在努力解决基本问题。我今天的挣扎:我想知道 SwiftUI 中是否有类似控制器的东西?与 UI 无关的逻辑去哪儿了?

举一个具体的例子:
我有一个外部框架。当应用程序启动时,我启动该框架(现在在 AppDelegate 中)。它做了一些网络上的事情,根据结果,我展示了两个视图之一。其中之一,用户必须输入一些东西,按下 OK 按钮,我必须将输入传递回 Framework。我该怎么做?
我没有控制器或协调器,把它放在视图中(通过单例)对我来说似乎是错误的。


旁注:有趣的是,我发现的每个教程都省略了这样的内容。它们都专注于一个更多的视图和一个 ViewModel,但从不“缩小”以显示整个应用程序(除了与 NavigationLink 链接的两个视图)如何工作。如果有人能指出我解决这个问题的方法,我会非常感激。

Jim*_*lai 7

旁注:有趣的是,我发现的每个教程都忽略了这样的内容。

这是因为 MVVM 并不强调控制。它是围绕模型视图绑定构建的。MVVM 并不能阻止您编写错误的控制代码,并且它需要 iOS 中直到 SwiftUI 才出现的绑定机制。它绝不是像一些互联网文章希望您相信的那样解决所有问题。

SwiftUI 受 MVVM 影响?是的。

SwiftUI是基于MVVM的?不。我认为它更像 React。

没有视图控制器并不意味着您应该在视图模型中进行控制。

这只是意味着您不需要额外的对象来进行控制。功能本身就是控制。

在 SwiftUI 中,您使用 @State 作为本地状态,并使用函数来改变它。这是您可以找到控制权的地方。

还有其他机制可以导入外部状态,例如@EnvironmentObject。

状态变化会触发视图更新,就像 React 一样。

一些 MVVM 开发人员和他们的母亲会创建一个名为视图模型的对象,但没有任何绑定支持;然后花费大量时间使用组合进行手动绑定,并在几次重构提交之后告诉您 MVVM 是基督的第二次降临,也是干净架构的最佳希望。

你不必这样做。显然我很固执己见,所以要持保留态度。

你只需要寻找 SwiftUI 在哪里以及如何进行绑定,你就会知道视图模型是多余的。所以不,SwiftUI 不是基于 MVVM 的。它可以具有模型视图映射,而无需创建任何视图模型。您无需学习 MVVM 即可理解其中任何内容。

如果您的控件是函数,则在 SwiftUI 中管理控件会更容易。视图控制器的删除意味着您不必担心它的生命周期和内部状态。您可以通过协议来管理它们,甚至引入一些函数式编程范例。

如果您仔细观察 SwiftUI 设计,您会注意到值类型的大量使用以及对象及其生命周期的删除。两者都与 MVVM 范式直接对立。

每个 MVVM 开发人员都使用引用类型作为视图模型;SwiftUI 希望您将值类型映射到视图。IE; 结构模型:视图。Swift 不是 Java,但你不会看到有人提到这一点。

  • 因此,更实际的是,这意味着将尽可能多的控制逻辑提取到单独/较小的控制器中,但除此之外,还要处理 SwiftUI 视图内的所有接线逻辑? (2认同)