值得一提的是,我找到的每个教程都省略了这样的东西。
这是因为MVVM不强调控制。 它的构建在于拥有模型-视图绑定。 MVVM并不会阻止您编写糟糕的控制代码,并且它需要绑定机制,而在iOS中直到SwiftUI才出现。 就像一些互联网文章所说的那样,它绝不是解决所有问题的方法。
SwiftUI受MVVM影响吗? 是。
SwiftUI基于MVVM吗? 不。 我认为它更像React。
没有视图控制器并不意味着您应该在视图模型中进行控制。
这只是意味着您不需要额外的对象来进行控制。 函数本身就是控制。
在SwiftUI中,您可以使用@State来管理局部状态,并使用函数对其进行修改。 这就是您将找到控件的地方。
还有其他机制可以导入外部状态,例如@EnvironmentObject。
状态更改会触发视图更新,就像React一样。
一些MVVM开发人员和他们的母亲会创建一个名为view model的对象,其中根本没有绑定支持; 然后花费大量时间使用Combine进行手动绑定,并在几次重构提交之后告诉您MVVM是基督的第二次降临,并且是清洁架构的最佳希望。
你不需要这样做。 显然,我有自己的观点,所以要带着一颗谨慎的心看待它。
您只需要查找SwiftUI如何进行绑定的位置和方式,就可以知道view model是多余的。 所以,SwiftUI并非基于MVVM。它可以具有模型-视图映射,而无需创建任何view model。 您不需要学习MVVM就能理解其中任何内容。
如果您仔细观察SwiftUI设计,您会注意到大量使用值类型和删除对象及其生命周期。 这两者与MVVM范例直接相反。
每个MVVM开发人员都将引用类型用作view model; SwiftUI希望您将值类型映射到视图。 即; struct Model:View。 Swift不是Java,但您不会看到任何人提到这一点。
HostingViewController
,但SwiftUI基于MVVM模式。因此,不需要搜索ViewController,而应该寻找ViewModel。 - Mojtaba Hosseini