缩小ViewController的方法:适配器,数据源,观察者…(iOS)
你好! 我敢肯定,你们大多数人都遇到了至少一个如此巨大的视图控制器,以至于您甚至都无法搜索到想要的东西。
或更糟糕的是,您可能会发现大多数具有tableView(或集合,具有数据源的任何东西)的控制器都执行相同的操作……获取数据,修改数据,更新视图,重复……
我们一直在这样做, 如果您在每个视图控制器中执行所有操作,则它们可能是0%可重用的 。
图表
这是普通表格视图控制器的示意图:
-
TableViewController
向dataSource
询问数据。 -
dataSource
有一个适配器 , 将我们的tableView
绑定到我们的数据。 - 适配器具有一个可观察的元素数组,因此在更新时,适配器会收到通知,并且
tableView
更新。
注意:我没有为此使用任何外部库。
可观察的
首先,我们的可观察集合将基本上遵循以下协议:
从这里,您可以猜测会有一个动作( ObserverAction
)用于我们对集合所做的“所有”操作(追加,删除等),因此,观察者将在那里绑定动作。
我为数组创建了一个简单的observableArray ObservableArray
,这是我们将在本示例中使用的数组(类和整个项目都在最后链接)。
为什么可观察? 看看为我们所做的一切添加一些观察者是多么容易:
适配器-将视图绑定到我们的数据
接下来是创建我们的适配器,它可以符合:
公共协议ComponentAdapter {
relatedtype组件:UIView
relatedtype元素:集合
}
我们可以创建一个符合此协议的TableViewAdapter
。 在这种情况下,该组件将是UITableView
。
基本上,我们拥有我们的视图以及要将其绑定到的数据。
使用我们的可观察数组,绑定过程非常容易。 在适配器的init
方法中,您可以执行以下操作:
数据源
表格视图控制器将绑定到一个数据源 ,这是一个符合UITableViewDataSource
的自定义数据源 ,它具有一个适配器 ,用于在源和UI级别管理数据中的更新 。
在内部,我们实现了典型的方法: numberOfRowsInSection
, cellForRowAt indexPath
以及其他一些方法,可通过滑动单元格或仅将行移动到其他位置来删除它。 例如,这是移动一行的全部代码 :
容易吧? 通过我们的适配器和可观察到的代码,我们的代码变得又细又优雅😁
我们的HUUGE(😉)视图控制器:
而已! 一个非常小的视图控制器,完全响应,可以根据需要使用。
谢谢阅读!
在下面,您将找到流程图和带有这些类的完整用法示例的存储库。
链接
流程图制作器和在线图表软件
draw.io是免费的在线图表软件,用于制作流程图,流程图,组织结构图,UML,ER和网络… www.draw.io illescasDaniel / MVVCRecipes示例
使用viewModels,适配器,dataSources,动态数据等的项目示例– illescasDaniel / MVVCRecipesExample github.com