首页 > 解决方案 > 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

}

标签: iosswiftmvvm

解决方案


是的,您可以将任何符合这些协议的对象设置为委托、数据源或将它们分离为不同的对象,任何人和任何人都可以实现协议。

在编写复杂的表视图数据源或委托时,最好定义一个类型,其目的是作为表视图的数据源。这有助于更好地分离对象之间的职责。

您可以在此处找到 Apple 实现不同对象作为表/集合视图的数据源的示例:Apple 的具有集合视图的 高级用户界面

这些对象不一定是您的 viewModel,但请看一个很好的例子: MVVM with viewModel as the table datasource


推荐阅读