我正在使用PINCache将缓存添加到我的应用程序中,我处于这样一种情况,即缓存系统会调用编码/解码的委托方法. 这些方法是通用的,但通用值不明确地符合Codable.因为它们是委托,所以我无
这些方法是通用的,但通用值不明确地符合Codable.因为它们是委托,所以我无法更改签名以使泛型类型符合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) } }
使用此代码,我遇到以下错误:
In argument type
T.Type
,T
does not conform to expected typeDecodable
如何强制我的解码器接受通用值?
由于Codable无法在扩展中实现(但是?),并且由于SimpleModel是PINCache的内部,因此无法使其符合Codable.如果可能,我建议切换到一个缓存库,其协议支持Codable,如Cache