我如何在 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。
我收到一个我不明白的错误。任何帮助将不胜感激。
我想像这样覆盖 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。