2015-10-06 145 views
0

考虑我有一个模型,并为它的基本模型:多泛型类继承

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

现在我要访问从ModelServiceitems变量,并期望得到的Model秒的阵列,但我得到BaseModel!而非:

Error message: Cannot assign a value of type [BaseModel] to a value of type [Model]

我是否错过了泛型?

下面是游乐场的全码:

//: 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] 
    } 

} 

回答

1

在你的情况,声明应该是:

class BaseModelService<T: BaseModel>: AbstractService<T> { 
} 

class ModelService: BaseModelService<Model> { 
} 

当你这样做:

class BaseModelService<T: BaseModel>: AbstractService<BaseModel> { 
} 

TAbstractServiceTBaseModelService是两种截然不同的类型。 前者限于混凝土BaseModel,而后者限制为BaseModel的亚型,根本不使用。

+0

非常感谢你,现在工作得很好! –

2

的问题是你逼BaseModelService是的AbstractModelService<BaseModel>子类,这意味着items键入[BaseModel]。声明BaseModelService如下:

class BaseModelService<T: BaseModel>: AbstractService<T> { 

那么你是好去。