如何使 class in Swift 扩展具体的 class 并符合多个协议?

How to make a class in Swift extend a concrete class and conform to multiple protocols?

背景

我正在为 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
}

目前使用此扩展的 class 声明如下:

final class MyViewController: UIViewController {

然后我称这个为 view did load:

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

..

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

但是我收到了错误

Ambiguous reference to member 'tableView'

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

注意:我使用的是 Swift 4.2.

加就行了

final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

此外,如果 attachToController(...) 分机在 UITableViewController 上,它将无法工作,我假设根据您的称呼,您希望它在 UITableView[=14 上=]