我如何在 class 中 return Swift 中的泛型类型 classing

How do I return a generic type in Swift in a class that I am subclassing

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

我想像这样覆盖 BaseViewController class 和 return TableViewHandler 的子class

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 class 的样子。

TableViewHandler 是一个 class 这样的

class TableViewHandler: NSObject, UITableViewDelegate, UITableViewDataSource {

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

    ///etc

}

这就是 TableViewHandler 子class 的样子

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)
    }
}

注意这里我根本不使用 generics