分离UITableView的DataSource与Delegate

前言

之前看过一些分离 dataSource 与 delegate 的都是oc的代码。估计也有可能是太简单了,没有这个必要分享。我在这里做一下笔记,免得我以后忘记,也给后来者一些捷径。

环境

  • macOS 10.12.4
  • Xcode 8.3.1

实现

实现一个DataSource

新建一个TableViewDataSourceclass,因为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的比较重要的一环。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容