我正在为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
,并符合UITableViewDataSource
和UITableViewDelegate
协议..想法?
注意:我正在使用Swift 4.2。
答案 0 :(得分:1)
只需添加
final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
如果attachToController(...)
扩展名在UITableViewController
上不起作用,我假设根据您的称呼,您希望它在UITableView
上