我有一个区分两个模型的协议:
protocol Differ {
associatedtype Model
func diff(oldModel: Model, newModel: Model)
}
和实现协议的具体类:
class CabinModelDiffer: Differ {
func diff(oldModel: CabinModel, newModel: CabinModel) { }
}
模型只是具有某些属性的类:
class CabinModel { //some properties... }
最后,我有一个更高的类,其中包含一个不同的类:
class CabinManager {
var differ: CabinModelDiffer?
}
我可以创建一个变量并将其分配给:
let manager = CabinManager()
manager.differ = CabinModelDiffer()
我的问题是,我希望能够为经理分配一个模拟差异,以进行单元测试,如下所示:
manager.differ = MockCabinModelDiffer() //Error: Cannot assign value of type
其中我的模拟差异实现协议并使用与实际差异相同的关联类型:
class MockCabinModelDiffer: Differ {
func diff(oldModel: CabinModel, newModel: CabinModel) { }
}
我无法弄清楚如何或者是否有可能在管理器中声明不同的变量,以便它可以接受符合Differ
协议并使用CabinModel
作为其关联的任何类型类型。
class CabinManager {
var differ: ??? //what type to declare this as?
}
答案 0 :(得分:0)
如果您尝试在协议中使用关联类型,则必须将类创建为泛型。
1