带有可编码数组的 swift 5 抽象网络响应

Posted

技术标签:

【中文标题】带有可编码数组的 swift 5 抽象网络响应【英文标题】:swift 5 abstract network response with codable array 【发布时间】:2020-07-05 08:01:33 【问题描述】:

我有一个模特Employee & Office

struct Employee: Codable 
    let id: Int
    let firstName: String
    let lastName: String

struct Office: Codable 
    let id: Int
    let name: String

应要求的员工或办公室机构的要求:


  total: Int
  rows: [Employee]

or

  total: Int
  rows: [Office]

为此,我想创建抽象模型,例如:

struct NetworkResponse: Codable 
    let rows: [Codable]
    let total: Int

但它会抛出错误:

类型“NetworkResponse”不符合协议“Decodable”

类型“NetworkResponse”不符合协议“Encodable”

无法自动合成“Decodable”,因为“[Decodable]”不符合“Decodable”

如何为任何响应创建抽象响应模型?

【问题讨论】:

【参考方案1】:

使用泛型:

struct NetworkResponse<T: Codable>: Codable 
    let rows: [T]
    let total: Int


typealias EmployeeResponse = NetworkResponse<Employee>
typealias OfficeReponse = NetworkResponse<Office>

【讨论】:

以上是关于带有可编码数组的 swift 5 抽象网络响应的主要内容,如果未能解决你的问题,请参考以下文章

多部分请求 - 带有 UIImage 的可编码结构

我想将字符串值从 API 转换为自定义可编码模型 SWIFT

Swift 4 可编码领域对象子类

Swift 可编码初始化

如何在可编码结构中使用计算属性(swift)

Swift 可编码解析 keyNotFound