如何在Swift中使类扩展具体的类并符合多种协议?

时间:2018-11-23 08:24:59

标签: ios swift swift4 swift-extensions swift4.2

背景

我正在为UITableViewController创建扩展名,如下所示:

func attachToController<C: UIViewController>(_ sender: C, alignTo: UIView, to: ALEdge = .top , withOffset: CGFloat = 0.0)
    where C: UITableViewDataSource, C:UITableViewDelegate
{
    self.estimatedRowHeight = 44
    ..
    self.delegate = sender as UITableViewDelegate
    self.dataSource = sender as UITableViewDataSource
}

当前使用该扩展名的类的声明如下:

final class MyViewController: UIViewController {

然后我认为它确实加载了:

override func viewDidLoad() {
    super.viewDidLoad()
    self.setupTableView()
}

..

func setupTableView() {
    self.tableView.attachToController(self, alignTo: self.view, withOffset: 0.0)
    ..
 }

但是我遇到了错误

  

对成员'tableView'的不明确引用

我想声明MyViewController,以便它扩展UIViewController,并符合UITableViewDataSourceUITableViewDelegate协议..想法?

注意:我正在使用Swift 4.2。

1 个答案:

答案 0 :(得分:1)

只需添加

final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

如果attachToController(...)扩展名在UITableViewController上不起作用,我假设根据您的称呼,您希望它在UITableView