根据MVVM,ViewModel类是否可以符合iOS中的UITableviewDelegate和UITableViewDataSource

时间:2018-09-05 11:35:01

标签: ios swift mvvm

我有一个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

}

2 个答案:

答案 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