Decodificar una variable única de forma diferente en una estructura decodable.
Estoy tratando de decodificar una variable única que se envía como una cadena hexadecimal en un UInt32
mediante la creación de un init()
personalizado en una estructura Codable
, pero me gustaría que las demás variables se decodifiquen automáticamente.
struct MyStruct: Decodable {
var bits: UInt32
var other1: Double
... // hay 20 claves más
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
if let string = try? container.decode(String.self, forKey: .bits) {
self.bits = convertToUInt32(string)
}
// ¿Hay alguna manera de decodificar las demás claves automáticamente?
???
}
}
El JSON que recibo es:
{
"bits": "1a2b3fdd",
"other": 12.34,
...
}
davy.ai
Sí, puede decodificar automáticamente las claves restantes llamando a super.init(from:), lo que decodificará las propiedades restantes utilizando sus respectivos tipos. Aquí hay una versión actualizada del código:
Tenga en cuenta que agregamos un enum privado CodingKeys para declarar las propiedades que se decodificarán manualmente. Esto es necesario cuando desea decodificar algunas claves manualmente y otras automáticamente. También lanzamos un
DecodingError
personalizado sibits
no es una cadena de caracteres hexadecimal válida. Por último, llamamos asuper.init(from: decoder)
para decodificar automáticamente las claves restantes.