0

我有一个非常简单的要求:

{"token": "abcd", "key": "value" }

我正在尝试将此请求添加为Encodable. 现在,问题出现了,key名称可以是“123”、“311”之类的任何东西,键的类型是String,但它的名称是动态的。如何在 Encodable 中添加动态名称?

struct Answers: Encodable {
  let token: String 
  let key: String 
}

我尝试使用泛型,但没有奏效。有人知道吗?

4

2 回答 2

0

抢,

如果您可以更改 JSON 响应,您可以使用类似的东西{token: "AAA", data: {"key":"123"}}

所以你可以创建

struct Response<DataType: Codable>: Codable { 
    let token: String
    let data: DataType
}

有了这个Struct,你可以传递许多动态值的组合。

我的解决方案不适用于您的实际数据,但也许您可以与团队讨论 API 并可能更改数据。

于 2020-05-07T13:35:03.810 回答
0

我认为Codable目前不允许这种功能。到目前为止,您无法使用动态键Codable创建类型。

或者,如果这是您正在使用的模型,您可以简单地Dictionary从中创建一个,然后使用JSONEncoder().

例子:

let dict = ["token": "abcd", "1234": "value"]
do {
    let response = try JSONEncoder().encode(dict)
    print(response)
} catch {
    print(error)
}
于 2020-05-07T13:16:28.147 回答