我收到了我不明白的错误。任何帮助,将不胜感激。

我想重写BaseViewController类并返回TableViewHandler的子类,如下所示

class VenueViewController: BaseViewController {

    override func tableHandler<T : TableViewHandler>() -> T? {
        return VenuesTableViewHandler(delegate: self) // Error here VenuesTableViewHandler is not convertible to 'T'
    }

}


这是我的BaseViewController的样子

class BaseViewController: UIViewController {

    var tableViewHandler: AnyObject! {
        get {
            return self.tableHandler()
        }
    }

    func tableHandler<T: TableViewHandler >() -> T? {
        return nil
    }
}


我收到错误消息“ VenuesTableViewHandler无法转换为T”。如果有帮助,这就是TableViewHandler类的外观。

TableViewHandler是一个像这样的类

class TableViewHandler: NSObject, UITableViewDelegate, UITableViewDataSource {

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 0
    }

    ///etc

}


这就是TableViewHandler子类的样子

class VenuesTableViewHandler: TableViewHandler {

    init(delegate: VenueListProtocol) {
        self.delegate = delegate
        super.init()
    }

}

最佳答案

仍未完全清楚您在尝试什么,以下内容是否符合您的需求?

class TableViewHandler: NSObject, UITableViewDelegate, UITableViewDataSource {

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 0
    }

    ///etc

}

class BaseViewController: UIViewController {

    var tableViewHandler: TableViewHandler {
        get {
            assertionFailure("Must override ...")
            //return TableViewHandler()
        }
    }
}

class VenuesTableViewHandler: TableViewHandler {
    init(delegate: AnyObject) {
        // Custom implementation
    }
}

class VenueViewController: BaseViewController {

    override var tableViewHandler: TableViewHandler {
        return VenuesTableViewHandler(delegate: self)
    }
}


注意这里我根本不使用泛型。

10-01 10:03