Swift:如果我要关联两种类型,如何使用相关类型符合协议?

时间:2017-11-10 15:52:25

标签: swift associated-types

也许是个奇怪的问题,这只是因为我真的不知道我要求什么,所以我会尽力描述它。如果之前有人问过,请指导我。

所以我在几乎所有的模型中使用了很棒的Codable协议,我正在创建一个处理一些存储的类,我们称之为Storage<Model: Codable>,它具有符合{的泛型类型{1}}因为这个类的一个实例将处理一种模型的存储。

现在,我需要在存储实例中的内容发生变化时收到通知,例如写入磁盘和删除的内容。所以我创建了一个新的协议Codable来声明像StorageListener这样的函数。现在由于这使用了需要使用通用func storage(_ storage: Storage<CodableType>, didRemoveModelForKey key: String)的存储类型,因此必须声明关联类型:Model

所以我现在使用类型擦除来创建associatedtype CodableType: Codable,我可以将其存储在Storage类的数组中。 现在这很好,我可以将我的ViewModel或其他任何内容整合到AnyStorageListener<AnyCodableType: Codable>: StorageListener并声明StorageListener但是如果我需要我的ViewModel来收听两个不同类型的存储器会怎么样?

我想到的是使用侦听器容器对象,我可以使用闭包初始化协议函数,从而解决问题。这应该工作,但我想知道是否有一个更清洁的解决方案?也许某种方式可以完全删除通用要求?

0 个答案:

没有答案