考虑一下,我有一个模型和一个基本模型:
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> {
}
现在我想从中访问items
变量,ModelService
并期望得到Model
s的数组,但是我却得到BaseModel
s:
我有没有想过使用泛型的东西?
这是Playground的完整代码:
//: 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
forAbstractService
和T
forBaseModelService
是两种不同的类型。前者仅限于混凝土BaseModel
,而后者仅限于的子类型BaseModel
,并且根本不使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句