Вы всегда можете реализовать свою собственную функцию декодирования, которая позволяет вам делать все, что вы хотите, но быстрый способ обойти это просто пометить все, что не гарантированно будет возвращаться как необязательное.
Имейте в виду, если ключ возвращается сервером, затем он должен правильно декодироваться. Обычно я бы предложил сделать Body
необязательным ... однако здесь это не сработает.
В этом случае вы захотите сделать:
struct ApiResponse: Decodable {
let header: Header
let body: Body // key is being returned so we keep it as part of the response
struct Header: Decodable {
let code: Int // match your variables with the JSON being returned
let message: String
}
struct Body: Decodable {
let clientId: Int? // sometimes nothing comes inside the body dict, so make its internals optional
}
}
РЕДАКТИРОВАТЬ:
ТАКЖЕ, как отметил Лео в комментариях, вы также совершили глупую ошибку, фактически не сопоставив ваши переменные с ответом. Обратите внимание, что ваш JSON имеет code
в качестве ключа, в то время как ваш Header
объект ищет responseCode
Я отредактировал свой первоначальный ответ, чтобы также внести это изменение.