多泛型类继承
问题描述:
考虑我有一个模型,并为它的基本模型:多泛型类继承
class BaseModel: NSObject {
var name = ""
}
class Model: BaseModel {
var desc = "abc"
}
我增加了一个服务,这些模型的工作:
class AbstractService<T: NSObject>: NSObject {
var items = [T]()
}
class BaseModelService<T: BaseModel>: AbstractService<BaseModel> {
}
class ModelService<T: Model>: BaseModelService<Model> {
}
现在我要访问从ModelService
items
变量,并期望得到的Model
秒的阵列,但我得到BaseModel
!而非:
我是否错过了泛型?
下面是游乐场的全码:
//: Playground - noun: a place where people can play
import UIKit
/// Models:
class BaseModel: NSObject {
var name = ""
}
class Model: BaseModel {
var desc = "abc"
}
/// Services:
class AbstractService<T: NSObject>: NSObject {
var items = [T]()
}
class BaseModelService<T: BaseModel>: AbstractService<BaseModel> {
}
class ModelService<T: Model>: BaseModelService<Model> {
}
/// ViewController:
class ViewController: UIViewController {
let modelService = ModelService()
var items = [Model]()
override func viewDidLoad() {
super.viewDidLoad()
items = modelService.items // The error appears here: Cannot assign a value of type [BaseModel] to a value of type [Model]
}
}
答
在你的情况,声明应该是:
class BaseModelService<T: BaseModel>: AbstractService<T> {
}
class ModelService: BaseModelService<Model> {
}
当你这样做:
class BaseModelService<T: BaseModel>: AbstractService<BaseModel> {
}
T
为AbstractService
和T
为BaseModelService
是两种截然不同的类型。 前者限于混凝土BaseModel
,而后者限制为BaseModel
的亚型,根本不使用。
答
的问题是你逼BaseModelService
是的AbstractModelService<BaseModel>
子类,这意味着items
键入[BaseModel]
。声明BaseModelService
如下:
class BaseModelService<T: BaseModel>: AbstractService<T> {
那么你是好去。
非常感谢你,现在工作得很好! –