SwiftUI 中的 MVVM 和相应的绑定 [关闭]

Posted

技术标签:

【中文标题】SwiftUI 中的 MVVM 和相应的绑定 [关闭]【英文标题】:MVVM in SwiftUI and the appropriate Bindings [closed] 【发布时间】:2021-06-24 05:04:24 【问题描述】:

已编辑

一个应用有多个数据源

combine所有数据源放在一个类中并将其添加为一个环境对象的最佳方法是什么,请记住数据可能会更改,因此对象会更新视图?

什么是合适的绑定用于:

服务(API 获取):@Published?

计算变量:惰性变量?

请以图表为例。谢谢。

这些问题是很好的参考:

An equivalent to computed properties using @Published in Swift Combine?

https://medium.com/genetec-tech/property-wrappers-in-swift-5-1-the-missing-published-implementation-1a466ebcf660

图表

【问题讨论】:

这确实是一大堆代码(无法测试,因为您没有包含运行它所需的类型)和多个问题。有什么方法可以将其缩减为 minimal reproducible example 并更简洁地表达它?你可能更有可能得到一个好的答案。 【参考方案1】:

所以,你应该使用分层架构,你不会有这些问题。

服务层,它是最低层,从 web 或 db 或其他服务读取数据 存储库层从服务中获取数据并对其进行处理、缓存等 用例层结合来自多个存储库的数据 视图模型层从用例中获取数据并将其发送到视图

例如,每个服务或存储库处理一种类型的数据“用户”

现在,如果您需要组合多种类型的数据,比如用户和公司,假设您需要一个 Usecase 层来组合所有数据

在您的 viewmodel 上,您只使用 usecase 层

一个重要的注意事项,传递的对象在层之间改变,所以在 service layer 你有 UserDto (来自 webservice)和 UserEntity (来自 DB),repo 将转换 UserResponse 中的那些,你不知道它是 db 还是 webservice,而且 UseCase 将转换 UserResponse 和 CompanyReponse 到一个 User 对象中,该对象将被传递给 ViewModel 并包含那里所需的所有数据。

另外,在你到达 viewmodel 层之前,你不应该需要 SwiftUI,如果你需要它,那你做错了,使用 Swift Combine 来处理数据。

【讨论】:

感谢您为我指明正确的方向!将从这里开始developer.apple.com/videos/play/wwdc2019/721

以上是关于SwiftUI 中的 MVVM 和相应的绑定 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 MVVM 在 SwiftUI 中显示警报

在 SwiftUI MVVM 中的子视图和父视图之间共享值

如何将 SwiftUI 视图绑定到数组中元素的属性

将 SwiftUI 按钮绑定到 AnySubscriber,例如 RxCocoa 的按钮点击

SwiftUI 在哪里加载 MVVM 中的数据

手动更新 SwiftUI View