ios - ViewModel 类能否按照 MVVM 在 iOS 中符合 UITableviewDelegate 和 UITableViewDataSource
问题描述
我有一个视图控制器,它根据某些条件/用户类型显示具有复杂 UI 和不同类型数据的表视图。这涉及分离和处理用户选择和隐藏/取消隐藏展开/关闭部分的数据的逻辑。当我使用 MVVM 模式时,我的 viewmodel 类可以符合 UITableviewDelegate 和 UITableViewDataSource,以便我有一个更薄的 viewcontroller 吗?
就像是 -
class HomeViewController: UIViewController {
.
.
let viewModel = HomeViewModel()
@IBOutlet weak var tableView: UITableView!
.
.
tableView.delegate = viewModel
tableView.dataSource = viewModel
}
class HomeViewModel: UITableViewDataSource, UITableViewDelegate {
//Implement delegates
}
解决方案
是的,您可以将任何符合这些协议的对象设置为委托、数据源或将它们分离为不同的对象,任何人和任何人都可以实现协议。
在编写复杂的表视图数据源或委托时,最好定义一个类型,其目的是作为表视图的数据源。这有助于更好地分离对象之间的职责。
您可以在此处找到 Apple 实现不同对象作为表/集合视图的数据源的示例:Apple 的具有集合视图的 高级用户界面
这些对象不一定是您的 viewModel,但请看一个很好的例子: MVVM with viewModel as the table datasource
推荐阅读
- python - 有没有办法阻止跟随模型中的自我跟随?
- css - CSS Grid 项目仅在 Chrome 中增长到最大高度
- latex - 引用在使用 natbib 包的乳胶中不起作用
- java - PITest 问题:属性“mainClass”是最终的,无法进一步更改
- javascript - 如何检查函数是否被 jest 调用
- javascript - ChartJS:y轴正负部分的两个标题
- python - 影响python日志记录器的导入路径
- android - ListView 项目上的 onClick 侦听器
- python - Python MySQL编程错误:1064(42000),同时使用Flask制作表格
- javafx - Inno Setup 没有从 netbeans 创建 .exe