ios - 使用视图模型中的 RxSwift 将动态自定义控件添加到视图中
问题描述
我最近开始使用 RxSwift。我现在确实有一些基础知识。我有一个视图控制器,我为其创建了相应的视图模型,并且定义了一些属性,并绑定到视图控制器中视图上的一些标签。此绑定工作正常。
我还有一些自定义控件,它们根据 api 响应中的某些条件动态添加到视图控制器中的滚动视图中。由于 API 调用是通过视图模型进行的,因此视图模型将具有完整的响应,并且可以直接设置与视图上的标签控件绑定的属性。这是我需要一些想法或提示的场景
根据 API 响应中的一些标志,我需要告诉视图将自定义控件 A、B、C 动态添加到滚动视图中,并将所需的数据传递给自定义控件以进行填充。并且要传递给自定义控件的数据是带有视图模型的。
是否建议为自定义控件创建视图模型?如果是,我该如何处理上述情况并使用 RxSwift 遵守 MVVM 模式。基本上由于完整的数据都在视图控制器的视图模型中,如何以最好的方式与自定义控件共享这些数据,同时符合 MVVM 模式并保持代码结构化。
解决方案
这取决于您的自定义控件的复杂性,如果您必须在其中处理大量业务逻辑/数据,那么该视图应该有自己的视图模型
可以这样想,在应用程序中我们有视图控制器,视图控制器只是一个视图,我们有一个视图模型。因此,当视图控制器如此复杂时,我们可以将其划分为具有自己视图模型的较小视图,如果需要,表格视图单元格可以具有其视图模型,这与您的情况类似。
所以我们可能有一个像这样的视图模型
class CustomControlViewModel: NSObject {
var data: String!
var flag: Int!
init(data: String, flag: Int) {
self.data = data
self.flag = flag
}
}
并且数据在 ViewControllerViewModel 内部控制
func createCustomControlViewModel() -> CustomControlViewModel {
return CustomControlViewModel(data: "data from view model", flag: 1)
}
希望这个答案对你有帮助
推荐阅读
- reactjs - 如何为 axios 请求设置操作名称(在反应应用程序中)?
- flutter - Flutter如何制作像UI一样的表格
- reactjs - 用未确定的斜杠反应路由动态网址
- javascript - 制作电影票应用程序时将 Nodelist.length 设为零
- jquery - jQuery 适用于 Chrome,但不适用于 Safari
- php - PHP 面向对象编程 - 何时使用公共、私有或受保护
- vuejs2 - 如何正确更新 VueJs .env 文件
- c - 使用 strtok 进行 C 程序段错误
- python - 我可以在 selenium 中暂停滚动功能,抓取当前数据,然后稍后在脚本中继续滚动吗?
- python - 从列表中运行函数