也许是个奇怪的问题,这只是因为我真的不知道我要求什么,所以我会尽力描述它。如果之前有人问过,请指导我。
所以我在几乎所有的模型中使用了很棒的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来收听两个不同类型的存储器会怎么样?
我想到的是使用侦听器容器对象,我可以使用闭包初始化协议函数,从而解决问题。这应该工作,但我想知道是否有一个更清洁的解决方案?也许某种方式可以完全删除通用要求?