我正在使用PINCache将缓存添加到我的应用中,并且处于缓存系统调用编码/解码的委托(delegate)方法的情况。
这些方法是通用的,但通用值未明确符合Codable
。因为它们是委托(delegate),所以我无法更改签名以使泛型类型符合Codable
。
func modelForKey<T : SimpleModel>(_ cacheKey: String?, context: Any?, completion: @escaping (T?, NSError?) -> ()) {
guard let cacheKey = cacheKey, let data = cache.object(forKey: cacheKey) as? Data, T.self is Codable else {
completion(nil, nil)
return
}
let decoder = JSONDecoder()
do {
let model: T = try decoder.decode(T.self, from: data)
completion(model, nil)
} catch {
completion(nil, nil)
}
}
有了这段代码,我遇到了以下错误:
如何强制
decoder
接受通用值? 最佳答案
由于Codable尚不能在扩展中实现(还?),并且由于SimpleModel是PINCache的内部组件,因此您无法使其与Codable兼容。
如果可能的话,我建议使用支持Cache的Codable协议(protocol)切换到缓存库