Swift 中可编码属性的 iOS 通用类型

Posted

技术标签:

【中文标题】Swift 中可编码属性的 iOS 通用类型【英文标题】:iOS Generic type for codable property in Swift 【发布时间】:2018-09-06 19:49:29 【问题描述】:

我需要获取一个用于解析 JSON 的结构的通用变量

但是我遇到了一个错误 类型“BaseJsonModel”不符合协议“Codable”

下面是我的结构

  struct BaseJsonStruct<T>: Codable 
    let info: String
    let data: T
 

错误:- 类型“BaseJsonModel”不符合协议“Codable”

【问题讨论】:

【参考方案1】:

T也必须符合Codable

struct BaseJsonStruct<T : Codable> : Codable 
    let info: String
    let data: T

【讨论】:

如果我使用 let item = try?解码器.解码(BaseJsonStruct.self,来自:数据)。比我得到错误 - 无法推断通用参数“T” 你有没有同样的想法 你必须指定静态类型例如decoder.decode(BaseJsonStruct&lt;String&gt;.self, from: data 试过了,但是变量中的值是 nil let itm1 = try?解码器.解码(BaseJsonStruct.self,来自:数据)。但它现在编译了 aleast 不,在您使用泛型时,您必须指定静态类型。 BaseJsonStruct&lt;T&gt; 是不可能的,它必须是BaseJsonStruct&lt;String&gt;BaseJsonStruct&lt;Int&gt; 或其他符合Codable 的东西。 Codable 依赖于具体类型。解码器无法解码动态类型。

以上是关于Swift 中可编码属性的 iOS 通用类型的主要内容,如果未能解决你的问题,请参考以下文章

可编码的自定义类类型属性不能从 JSON 初始化它自己的属性

基于另一个值的具有多种对象类型的可编码解码属性

Alamofire:具有额外属性的可编码对象

Swift 4 可编码;如何使用单个根级密钥解码对象

Swift:如何将可编码类型作为函数输入传递给编码或解码 json

如何在swift中使基类属性通用,以便可以与多种模型类型一起使用?