如何使 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
并且还符合 UITableViewDataSource
和 UITableViewDelegate
协议..想法?
注意:我使用的是 Swift 4.2.
加就行了
final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
此外,如果 attachToController(...)
分机在 UITableViewController
上,它将无法工作,我假设根据您的称呼,您希望它在 UITableView
[=14 上=]
背景
我正在为 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
并且还符合 UITableViewDataSource
和 UITableViewDelegate
协议..想法?
注意:我使用的是 Swift 4.2.
加就行了
final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
此外,如果 attachToController(...)
分机在 UITableViewController
上,它将无法工作,我假设根据您的称呼,您希望它在 UITableView
[=14 上=]