协议扩展中的UITableViewDelegate和DataSource实现

时间:2017-06-03 21:30:59

标签: ios swift uitableview protocols extension-methods

我的应用程序中有一堆UITableView基本上做同样的事情,所以我创建了一个名为Presenter的协议,并使它们都符合它。为简单起见,我决定在所述协议的扩展中实现UITableViewDelegateUITableViewDataSource方法。但是,我偶然发现了多个错误和警告,如下所示: enter image description here

在协议中添加@objc没有帮助。

现在我知道创建UITableView的子类可能会更容易,但我想知道是否有一个无痛的解决方案来解决这个问题。作为刚认识Swift的人,我试图尽可能多地实施协议。

以下是代码:

protocol Presenter {
    var viewer: Viewer { get }
}

extension Presenter where Self: UITableViewDelegate {
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return viewer.header
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return viewer.height
    }
}

extension Presenter where Self: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return viewer.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: GenericCell.identifier, for: indexPath) as! GenericCell
        cell.content = viewer.viewable(at: indexPath.row)
        return cell
    }
}

0 个答案:

没有答案