Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift 3: Tableview datasource methods "Overriding non-open instance method outside of its defining module" error

I have an open BaseViewController class in core framework that has tableview datasource methods implemented. Let's say I've another class (outside the module) ClassA with BaseViewController as it's superclass. When I try to override tableview datasource methods, it's throwing this error Overriding non-open instance method outside of its defining module.

BaseViewController looks like this

open class BaseViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

...

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 0
}

public func numberOfSections(in tableView: UITableView) -> Int {
    return 0
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    return UITableViewCell()
  }
}

ClassA

import CustomCoreFramework

class ClassA : BaseViewController {

// throws an error
public override func numberOfSections(in tableView: UITableView) -> Int {
    return tableViewListItems.count
}

}

I suppose the open class methods should be accessible outside the module. I tried changing the tableview methods access specifiers to public and different combinations but nothing seems to work.

like image 974
Srujan Simha Avatar asked Aug 18 '17 19:08

Srujan Simha


1 Answers

The BaseViewController’s methods should be declared open. This is discuss in the thread in reference.

See What is the 'open' keyword in Swift?

like image 100
Xvolks Avatar answered Nov 14 '22 22:11

Xvolks