我正在尝试使用Model-View-Presenter实现UITableViewController。由于我是这个概念的新手,所以我对如何将UITableView's数据源协议与UIViewController分开感到非常困惑。

许多文章都同意View + Viewcontroller必须笨,只考虑UI及其布局的想法。
另一方面,Presenter需要成为视图和模型之间的促进者,并且还必须实现逻辑,但是他们声明不包括UIKit,因为它不直接操纵UI。这就是我的困惑所在。

当我们实现UITableView时,我们必须实现两种协议:UITableViewDelegateUITableViewDataSource,尤其是数据源。

我假设委托属于视图部分,并在接收到用户操作时将事件传递给Presenter。

但是,要实现UITableViewDataSource,我们必须具有表视图使用的某些模型。话虽这么说,我只能想到两种以某种方式适合MVP的方法。

  • 将模型值从Presenter传递给UITableView,并使其在视图中出于数据源的考虑而成为只读值(例如,为特定索引创建行)。但是后来我认为它违反了MVP概念,因为Model值是View可以直接访问的。
  • 让presenter作为数据源。但是由于Presenter不应导入UIKit,因此我认为导入UIKit并实现UITableViewDatasource也违反了MVP概念。

  • 长话短说,我很困惑在哪里以及如何适当地实现UITableDatasource ...如果有人很好地了解此概念,请分享您的知识。先感谢您!

    最佳答案

    第一种选择是将适配器 模式与MVP一起使用。您可以在适配器类中符合 UITableViewDelegate UITableViewDataSource 。通过这种方式,您可以将tableView逻辑与ViewController分离,并且Presenter仍然不包括UIKit。

    关于ios - iOS-MVP设计中的UITableView委托(delegate)和数据源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55882273/

    10-11 20:00