Swift: Table view superclass error

I have created a slide out menu using Swift. I have done this many times before, but when I created it today, I get this error (see screenshot). It could just be a simple mistake I have made.

Here is the code, that I think is causing the problem:

  • Using background view for UITableViewCell in iOS 7 covers default delete button
  • UITableViewCell background color is different in iOS5 vs iOS4
  • UITableView: How to change cell height dynamically when a button is clicked in it? Swift
  • How to add images to UITableView cell?
  • reload cell data in table view with Swift
  • UITableViewCell reusability issue. Modifying one cell is affecting others
  •     override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell
        if cell == nil{
            cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
            cell!.backgroundColor = UIColor.clearColor()
            cell!.textLabel!.textColor = UIColor.darkTextColor()
            let selectedView:UIView = UIView(frame: CGRect(x: 0, y: 0, width: cell!.frame.size.width, height: cell!.frame.size.height))
            selectedView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.3)
            cell!.selectedBackgroundView = selectedView
        cell!.textLabel!.text = tableData[indexPath.row]
        return cell


    enter image description here

    UPDATE: I have tried removing override

    enter image description here

    Hope someone can help!

    4 Solutions Collect From Internet About “Swift: Table view superclass error”

    The method does not override any method of the superclass because the signature is wrong.

    The correct signature is

    override func tableView(tableView: UITableView, 
      cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    All parameters are non-optional types.

    And use also the recommended method

    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier,
                                               forIndexPath: indexPath)

    which also returns always a non-optional type

    Make sure that your class implements UITableViewDelegate and UITableViewDataSource.

    class MyController: UIViewController, UITableViewDelegate, UITableViewDataSource {
        // All your methods here

    You won’t need override keyword unless any other superclass already implements those methods.

    See this works for me

    • Just confirm UITableViewDelegate and UITableViewDataSource
    • Implement required methods

    import UIKit
    class ListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource  {
        let containArray = ["One","two","three","four","five"]
        // MARK: - View Lifecycle
        override func viewDidLoad() {
        override func viewWillAppear(animated: Bool) {
        override func didReceiveMemoryWarning() {
            // Dispose of any resources that can be recreated.
        //MARK: Table view data source and delegate methods
        //Number of rows
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return containArray.count
        //Prepare Custom Cell
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
            let identifier = "simpleTextCell"
            var cell: SimpleTextCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? SimpleTextCell
            if cell == nil {
                tableView.registerNib(UINib(nibName: "SimpleTextCell", bundle: nil), forCellReuseIdentifier: identifier)
                cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? SimpleTextCell
            let dayName = containArray[indexPath.row]
            cell.lblProductName.text = dayName
            return cell
        //Handle click
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            self.performSegueWithIdentifier("productListSegue", sender: self)

    Try to removing “!”, declaration for this function is:

     func tableView(_ tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

    and make sure you have set delegate and datasource of tableview to “self”