我有一个ViewController,它根据特定条件/用户类型显示具有复杂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
}
答案 0 :(得分:1)
tableView.delegate = viewModel
tableView.dataSource = viewModel
答案 1 :(得分:1)
是的,可以将符合那些协议的任何对象设置为委托,数据源,或者将它们分离为不同的对象,任何人都可以实现协议。
在编写复杂的表格视图数据源或委托时,最好定义一种类型,其目的是成为表格视图的数据源。这有助于更好地分离对象之间的职责。
您可以在此处找到Apple实现不同对象作为表/集合视图的数据源的示例: Advanced User Interfaces with Collection Views by apple
这些对象不必是您的viewModel,但是当它是时,请查看一个很好的示例: MVVM with viewModel as the table datasource