Как добавить имя и значение ключа Dynami c в Encodable (Swift)? - PullRequest
0 голосов
/ 07 мая 2020

У меня очень простой запрос:

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

Я пытаюсь добавить этот запрос как Encodable. Теперь возникает проблема, что имя key может быть любым, например, «123», «311», тип ключа будет String, но его имя - Dynami c. Как мне добавить имена динамических c в Encodable?

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

Я пробовал использовать дженерики, но это не сработало. У кого-нибудь есть идеи?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Rob,

Если вы можете изменить ответ JSON, вы можете использовать что-то вроде этого {token: "AAA", data: {"key":"123"}}.

Таким образом, вы можете создать

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

с это Struct, вы можете передавать множество комбинаций значений c Dynami.

Мое решение не работает с вашими фактическими данными, но, возможно, вы можете поговорить с командой об API и, возможно, изменить данные.

0 голосов
/ 07 мая 2020

Я не думаю, что Codable допускает такую ​​функциональность в настоящее время. На данный момент вы не можете создать тип Codable с динамическим c ключами .

В качестве альтернативы, если вы используете эту модель, вы можете просто создать Dictionary из него, а затем закодируйте его, используя JSONEncoder().

Пример:

let dict = ["token": "abcd", "1234": "value"]
do {
    let response = try JSONEncoder().encode(dict)
    print(response)
} catch {
    print(error)
}
...