前言
之前看过一些分离 dataSource 与 delegate 的都是oc的代码。估计也有可能是太简单了,没有这个必要分享。我在这里做一下笔记,免得我以后忘记,也给后来者一些捷径。
环境
- macOS 10.12.4
- Xcode 8.3.1
实现
实现一个DataSource
新建一个TableViewDataSource
class,因为UITableViewDataSource
这个协议是遵从NSObjectProtocol
,所以TableViewDataSource
需要继承NSObject
,并遵守UITableViewDataSource
协议
class TableViewDataSourceclass: NSObject, UITableViewDataSource {
...
}
为了避免互相持有,添加弱引用的tableView
变量
weak var tableView: UITableView!
最后添加协议方法
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
......
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
......
}
实现一个TableViewDelegate
方法与DataSource是完全一样的
具体代码为下
class TableViewDelegate: NSObject, UITableViewDelegate {
weak var tableView: UITableView!
...
}
使tableView遵从这两个类
回到主VC,只需要使tableView遵从这两个类就行了
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
private var tableViewDataSource = TableViewDataSource()
private var tableViewDeleta = TableViewDelegate()
override func viewDidLoad() {
super.viewDidLoad()
tableViewDataSource.tableView = tableView
tableViewDeleta.tableView = tableView
tableView.dataSource = tableViewDataSource
tableView.delegate = tableViewDeleta
}
}
非常简单的一个小Demo,可以让vc更加瘦身,也是mvvm的比较重要的一环。