Swift 4 Codable和泛型

Swift 4 Codable和泛型,第1张

概述我正在使用PINCache将缓存添加到我的应用程序中,我处于这样一种情况,即缓存系统会调用编码/解码的委托方法. 这些方法是通用的,但通用值不明确地符合Codable.因为它们是委托,所以我无法更改签名以使泛型类型符合Codable. func modelForKey<T : SimpleModel>(_ cacheKey: String?, context: Any?, completion: 我正在使用PINCache将缓存添加到我的应用程序中,我处于这样一种情况,即缓存系统会调用编码/解码的委托方法.
这些方法是通用的,但通用值不明确地符合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 type Decodable

如何强制我的解码器接受通用值?

@H_301_31@解决方法 由于Codable无法在扩展中实现(但是?),并且由于SimpleModel是PINCache的内部,因此无法使其符合Codable.

如果可能,我建议切换到一个缓存库,其协议支持Codable,如Cache

总结

以上是内存溢出为你收集整理的Swift 4 Codable和泛型全部内容,希望文章能够帮你解决Swift 4 Codable和泛型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005041.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存