如何声明符合特定关联类型协议的变量?

时间:2019-03-22 06:09:45

标签: ios swift

我有一个区分两个模型的协议:

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

1 个答案:

答案 0 :(得分:0)

如果您尝试在协议中使用关联类型,则必须将类创建为泛型。

1