Search code examples
iosprotocolsswift

Conform to protocol in ViewController, in Swift


Trying to conform to UITableViewDataSource and UITableViewDelegate inside a Swift UIViewController subclass.

class GameList: UIViewController {

    var aTableView:UITableView = UITableView()

    override func viewDidLoad() {
        super.viewDidLoad()
        aTableView.delegate = self
        aTableView.dataSource = self
        self.view.addSubview(aTableView)
        //errors on both lines for not conforming
    }

}

Docs say you should conform on the class line after the : but that's usually where the superclass goes. Another : doesn't work. Using a comma separated list after the superclass also doesn't work

EDIT:

Also must adopt all required methods of each protocol, which I wasn't initially doing.


Solution

  • You use a comma:

    class GameList: UIViewController, UITableViewDelegate, UITableViewDataSource {
        // ...
    }
    

    But realize that the super class must be the first item in the comma separated list.

    If you do not adopt all of the required methods of the protocol there will be a compiler error. You must get all of the required methods!