加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 4 Codable和泛型

发布时间:2020-12-14 04:36:13 所属栏目:百科 来源:网络整理
导读:我正在使用PINCache将缓存添加到我的应用程序中,我处于这样一种情况,即缓存系统会调用编码/解码的委托方法. 这些方法是通用的,但通用值不明确地符合Codable.因为它们是委托,所以我无法更改签名以使泛型类型符合Codable. func modelForKeyT : SimpleModel(_ c
我正在使用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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读