Я работаю с универсальным кодируемым для передачи ответа сети. Ниже я создал функцию, которая декодирует данные и возвращает результат:
Вот фрагмент этой функции:
guard let jsonDataUnwrapped = jsonData,
let result: ServerResponse<T> = try? JSONDecoder().decode(ServerResponse<T>.self, from: jsonDataUnwrapped) else {
completionHandler(.error(APIError.init(type: .parsingError)))
return
}
Код в ServerResponse:
struct ServerResponse<T: Codable> : Codable {
var response: T
var errors: [ServerError]
}
struct ServerError : Codable {
var code: Int
var message: String
}
В кодируемом классе я делаю это:
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
email = try values.decodeIfPresent(String.self, forKey: .email)
firstName = try values.decodeIfPresent(String.self, forKey: .firstName)
lastName = try values.decodeIfPresent(String.self, forKey: .lastName)
phoneNumber = try values.decode(String.self, forKey: .phoneNumber)
if let status = try values.decodeIfPresent(String.self, forKey: .accountStatus) {
accountStatus = UserStatus(rawValue: status)!
}
}
Этот код работает правильно, когда я получаю данные в ответном ключе. Но есть случай, когда я также получу пустой ключ ответа и у меня будет несколько ошибок:
{
"response": {},
"errors": [
{
"code": "104",
"message": "Authentication failed"
}
]
}
Когда я получаю пустой ответ, мне нужен массив ошибок, но я не могу его получить.