【发布时间】:2021-06-22 13:31:21
【问题描述】:
我想将具有泛型的子类转换为超类,但它不起作用。真不知道问题出在哪里?
class People: NSObject {}
class Teacher: People {}
class BaseClass<T: People>: NSObject{
init(_ model: T) {
super.init()
self.model = model
}
var model: T?
}
class SubClass<U: People>: BaseClass<U> {
override init(_ model: U) {
super.init ( model)
self.subModel = model
}
var subModel: U?
}
class Tools: NSObject {
static func transClass<M: People, T: BaseClass<M>>() -> T {
let o = SubClass(Teacher()) as! T
return o
}
}
_ = Tools.transClass()
问题补充
感谢@RobNapier 的回答!这对我有点帮助。 我问这个问题是因为我想实现这样的代码
假码:
class BaseCellModel: NSObject{}
class BaseTableCell<M: BaseCellModel>: UITableViewCell{
func setCellData(_ data: M){}
}
class BaseTableViewDelegate: NSObject, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
var dataSourceArr: [BaseCellModel] = [BaseCellModel]()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return CellTools.getCellWith(tableView: tableView, indexPath: indexPath, model: dataSourceArr[indexPath.row])
}
}
class CellTools {
static func getCellWith(tableView: UITableView, indexPath: IndexPath, model: BaseCellModel) -> BaseTableCell<BaseCellModel> {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! BaseTableCell<BaseCellModel>
cell.setCellData(model)
return cell
}
}
但是当我得到一个继承自 BaseTableCell 的 SubTableCell 时,代码正在运行到
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! BaseTableCell<BaseCellModel>
出错了。
不管怎样,非常感谢。
(但我想知道是否有更好的方法可以达到同样的效果。)
【问题讨论】: