0

I'm new to generics in Swift.

class MyTableViewController<Element>: UITableViewController {
    var data = [Element]()
}
class AnotherTableViewController: MyTableViewController<String> {}

MyTableViewController only overrides numberOfRowsInSection and didSelectRowAtIndexPath.

When I try to show AnotherTableViewController, this is the error I get when I try to initialize one: ...cannot be constructed because it has no accessible initializers.

I'm don't understand why I get this error since all my member variables are initialized. Does anyone know why I get this error?

Thanks

EDIT

Here's the actual code:

    class CRTableViewController<Element>: UITableViewController {

        var collecting = false {
            didSet {
                switchCollectingMode()
            }
        }

        var data = [Element]()
        var collectedData = [String:Element]()

        private func switchCollectingMode() {
            tableView.allowsMultipleSelection = collecting
            title = collecting ? "Collect Mode" : "Normal Mode"
            if !collecting {
                for (key, _) in collectedData {
                    let indexPath = NSIndexPath(forRow: Int(key)!, inSection: 0)
                    tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .None
                }
                collectedData.removeAll()
            }
        }

        // MARK: - Table view data source

        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return data.count
        }

        override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            let cell = tableView.cellForRowAtIndexPath(indexPath)

            if collecting {
                if cell?.accessoryType == .Checkmark {
                    cell?.accessoryType = .None
                    collectedData.removeValueForKey(String(indexPath.row))
                } else {
                    cell?.accessoryType = .Checkmark
                    collectedData[String(indexPath.row)] = data[indexPath.row]
                }
            } else {
                cell?.accessoryType = .None
            }

            tableView.deselectRowAtIndexPath(indexPath, animated: true)
        }

    }
class CREventsTableViewController: CRTableViewController<Event> {

    var model: ChronoModel!
    var eventsReferense: FIRDatabaseReference!

    override func viewDidLoad() {
        super.viewDidLoad()

        let delegate = UIApplication.sharedApplication().delegate as! AppDelegate
        model = delegate.model

        eventsReferense = model.databaseReferense.child("events")
    }

    // MARK: - Table view data source

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("EventCell", forIndexPath: indexPath)

        let event = data[indexPath.row]

        cell.textLabel?.text = event.title

        return cell
    }
}

And this is where the error occurs: enter image description here

user1563544
  • 379
  • 3
  • 17

0 Answers0