Decodificando tipos diferentes com e sem array
Oct 12 2020
Estou tentando decodificar o erro da seguinte maneira, a maioria dos erros que estou tratando no formato de matriz [String], mas em alguns casos o erro não está no formato de matriz, apenas um String.
Se houver erro no formato do array, o nome será como errors, mas se for no formato de string, ele será exibido error. Como eu poderia lidar com esse cenário?
Como eu poderia lidar com esse cenário?
struct CustomError: Codable {
let errors: [String]
}
private func errorDecoding(data : Data) {
let decoder = JSONDecoder()
do {
let errorData = try decoder.decode(CustomError.self, from: data)
} catch {
// TODO
}
}
Respostas
4 NewDev Oct 12 2020 at 00:35
Você teria que implementar manualmente init(from:)e tentar decodificar um tipo, caso contrário, decodificar outro:
struct CustomError {
let errors: [String]
}
extension CustomError: Decodable {
enum CodingKeys: CodingKey { case errors, error }
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
do {
self.errors = try container.decode([String].self, forKey: .errors)
} catch DecodingError.typeMismatch,
DecodingError.keyNotFound {
let error = try container.decode(String.self, forKey: .error)
self.errors = [error]
}
}
}
A parte da decodificação é normal:
do {
let error = try JSONDecoder().decode(CustomError.self, from: data)
} catch {
// ..
}
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino