缩小ViewController的方法:适配器,数据源,观察者…(iOS)

你好! 我敢肯定,你们大多数人都遇到了至少一个如此巨大的视图控制器,以至于您甚至都无法搜索到想要的东西。

或更糟糕的是,您可能会发现大多数具有tableView(或集合,具有数据源的任何东西)的控制器都执行相同的操作……获取数据,修改数据,更新视图,重复……

我们一直在这样做, 如果您在每个视图控制器中执行所有操作,则它们可能是0%可重用的

图表

这是普通表格视图控制器的示意图:

  • TableViewControllerdataSource询问数据。
  • dataSource有一个适配器我们的tableView 绑定到我们的数据。
  • 适配器具有一个可观察的元素数组,因此在更新时,适配器会收到通知,并且tableView更新。

注意:我没有为此使用任何外部库。

可观察的

首先,我们的可观察集合将基本上遵循以下协议:

ObservableCollection协议

从这里,您可以猜测会有一个动作( ObserverAction )用于我们对集合所做的“所有”操作(追加,删除等),因此,观察者将在那里绑定动作。

我为数组创建了一个简单的observableArray ObservableArray ,这是我们将在本示例中使用的数组(类和整个项目都在最后链接)。

为什么可观察? 看看为我们所做的一切添加一些观察者是多么容易:

适配器-将视图绑定到我们的数据

接下来是创建我们的适配器,它可以符合:

 公共协议ComponentAdapter { 
relatedtype组件:UIView
relatedtype元素:集合
}

我们可以创建一个符合此协议的TableViewAdapter 。 在这种情况下,该组件将是UITableView

基本上,我们拥有我们的视图以及要将其绑定到的数据。

使用我们的可观察数组,绑定过程非常容易。 在适配器的init方法中,您可以执行以下操作:

如何使用Adapter类中的ObservableArray将数据绑定到组件

数据源

表格视图控制器将绑定到一个数据源 ,这是一个符合UITableViewDataSource的自定义数据源 ,它具有一个适配器 ,用于在源和UI级别管理数据中的更新

在自定义数据源中,我们使用tableViewAdapter

在内部,我们实现了典型的方法: numberOfRowsInSectioncellForRowAt indexPath以及其他一些方法,可通过滑动单元格或仅将行移动到其他位置来删除它。 例如,这是移动一行全部代码

数据源中的代码可移动一行

容易吧? 通过我们的适配器和可观察到的代码,我们的代码变得又细又优雅😁

我们的HUUGE(😉)视图控制器:

而已! 一个非常小的视图控制器,完全响应,可以根据需要使用。

谢谢阅读!

在下面,您将找到流程图和带有这些类的完整用法示例的存储库。

链接

流程图制作器和在线图表软件
draw.io是免费的在线图表软件,用于制作流程图,流程图,组织结构图,UML,ER和网络… www.draw.io illescasDaniel / MVVCRecipes示例
使用viewModels,适配器,dataSources,动态数据等的项目示例– illescasDaniel / MVVCRecipesExample github.com