How to make a class in Swift extend a concrete class and conform to multiple protocols? [duplicate]
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
This question already has an answer here:
How do I make a class conform to a protocol in swift?
2 answers
Background
I am creating an extension for UITableViewController
like so:
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
}
Currently the class that's using this extension is declared like so:
final class MyViewController: UIViewController {
then I call this in view did load:
override func viewDidLoad() {
super.viewDidLoad()
self.setupTableView()
}
..
func setupTableView() {
self.tableView.attachToController(self, alignTo: self.view, withOffset: 0.0)
..
}
But I'm getting the error
Ambiguous reference to member 'tableView'
I would like to declare MyViewController
so that it extends UIViewController
and also conforms to the UITableViewDataSource
and UITableViewDelegate
protocols.. ideas?
Note: I'm using Swift 4.2.
ios swift swift4 swift-extensions swift4.2
marked as duplicate by Community♦ Nov 23 '18 at 13:12
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
How do I make a class conform to a protocol in swift?
2 answers
Background
I am creating an extension for UITableViewController
like so:
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
}
Currently the class that's using this extension is declared like so:
final class MyViewController: UIViewController {
then I call this in view did load:
override func viewDidLoad() {
super.viewDidLoad()
self.setupTableView()
}
..
func setupTableView() {
self.tableView.attachToController(self, alignTo: self.view, withOffset: 0.0)
..
}
But I'm getting the error
Ambiguous reference to member 'tableView'
I would like to declare MyViewController
so that it extends UIViewController
and also conforms to the UITableViewDataSource
and UITableViewDelegate
protocols.. ideas?
Note: I'm using Swift 4.2.
ios swift swift4 swift-extensions swift4.2
marked as duplicate by Community♦ Nov 23 '18 at 13:12
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
How do I make a class conform to a protocol in swift?
2 answers
Background
I am creating an extension for UITableViewController
like so:
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
}
Currently the class that's using this extension is declared like so:
final class MyViewController: UIViewController {
then I call this in view did load:
override func viewDidLoad() {
super.viewDidLoad()
self.setupTableView()
}
..
func setupTableView() {
self.tableView.attachToController(self, alignTo: self.view, withOffset: 0.0)
..
}
But I'm getting the error
Ambiguous reference to member 'tableView'
I would like to declare MyViewController
so that it extends UIViewController
and also conforms to the UITableViewDataSource
and UITableViewDelegate
protocols.. ideas?
Note: I'm using Swift 4.2.
ios swift swift4 swift-extensions swift4.2
This question already has an answer here:
How do I make a class conform to a protocol in swift?
2 answers
Background
I am creating an extension for UITableViewController
like so:
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
}
Currently the class that's using this extension is declared like so:
final class MyViewController: UIViewController {
then I call this in view did load:
override func viewDidLoad() {
super.viewDidLoad()
self.setupTableView()
}
..
func setupTableView() {
self.tableView.attachToController(self, alignTo: self.view, withOffset: 0.0)
..
}
But I'm getting the error
Ambiguous reference to member 'tableView'
I would like to declare MyViewController
so that it extends UIViewController
and also conforms to the UITableViewDataSource
and UITableViewDelegate
protocols.. ideas?
Note: I'm using Swift 4.2.
This question already has an answer here:
How do I make a class conform to a protocol in swift?
2 answers
ios swift swift4 swift-extensions swift4.2
ios swift swift4 swift-extensions swift4.2
edited Jan 21 at 0:22
halfer
14.8k759118
14.8k759118
asked Nov 23 '18 at 8:24
abboodabbood
16.1k983166
16.1k983166
marked as duplicate by Community♦ Nov 23 '18 at 13:12
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Community♦ Nov 23 '18 at 13:12
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Just add it
final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
Also if the attachToController(...)
extension is on UITableViewController
it won't work, I assume according to how you call it, you want it to be on UITableView
it works just fine.. i'm doing thisself.tableView.attachToController
– abbood
Nov 23 '18 at 8:43
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Just add it
final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
Also if the attachToController(...)
extension is on UITableViewController
it won't work, I assume according to how you call it, you want it to be on UITableView
it works just fine.. i'm doing thisself.tableView.attachToController
– abbood
Nov 23 '18 at 8:43
add a comment |
Just add it
final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
Also if the attachToController(...)
extension is on UITableViewController
it won't work, I assume according to how you call it, you want it to be on UITableView
it works just fine.. i'm doing thisself.tableView.attachToController
– abbood
Nov 23 '18 at 8:43
add a comment |
Just add it
final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
Also if the attachToController(...)
extension is on UITableViewController
it won't work, I assume according to how you call it, you want it to be on UITableView
Just add it
final class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
Also if the attachToController(...)
extension is on UITableViewController
it won't work, I assume according to how you call it, you want it to be on UITableView
answered Nov 23 '18 at 8:31
olejnjakolejnjak
483313
483313
it works just fine.. i'm doing thisself.tableView.attachToController
– abbood
Nov 23 '18 at 8:43
add a comment |
it works just fine.. i'm doing thisself.tableView.attachToController
– abbood
Nov 23 '18 at 8:43
it works just fine.. i'm doing this
self.tableView.attachToController
– abbood
Nov 23 '18 at 8:43
it works just fine.. i'm doing this
self.tableView.attachToController
– abbood
Nov 23 '18 at 8:43
add a comment |