Swift Codable y el patrón CodingKeys
El protocolo Codable de Swift (alias de tipo para Encodable & Decodable) es la forma estándar de parsear JSON. El generador produce tipos struct o class conformes a Codable con un enum CodingKeys cuando los nombres de propiedades difieren de las claves JSON. La convención de nomenclatura Swift usa lowerCamelCase para propiedades, por lo que "first_name" en JSON se mapea a firstName en Swift, con un case CodingKeys enlazando ambos.
El mapeo de tipos sigue las convenciones de Swift: las cadenas JSON se convierten en String, los enteros en Int, los decimales en Double, los booleanos en Bool y los arrays en [T]. Los objetos anidados generan sus propios tipos struct con nombre. JSON null y los campos ausentes se mapean a Optional (T?) con un valor por defecto nil en el inicializador.
El generador puede producir declaraciones struct (tipo valor, por defecto) o class (tipo referencia). Las structs son preferidas en Swift para modelos de datos porque tienen semántica de valor, son automáticamente thread-safe y evitan ciclos de retención.
CodingKeys, decodificadores personalizados y manejo de fechas
Cuando cualquier nombre de propiedad en una struct Swift difiere de su clave JSON, se genera un enum CodingKeys que lista el mapeo para cada propiedad. Este es el enfoque estándar de Swift compatible con JSONDecoder.
Una alternativa es establecer keyDecodingStrategy en JSONDecoder a .convertFromSnakeCase, lo que elimina la necesidad de CodingKeys cuando las únicas diferencias son snake_case vs camelCase. El generador puede emitir un comentario indicando esta opción cuando aplica.
Las cadenas de fecha JSON son un desafío común. El generador tipa los campos de fecha como String por defecto, pero un toggle los cambia a Date y emite una nota para establecer dateDecodingStrategy en JSONDecoder.
Flujos de trabajo de desarrollo iOS y SwiftUI
Los desarrolladores iOS que usan URLSession o Alamofire parsean respuestas de API con JSONDecoder().decode(MyModel.self, from: data). El generador produce el tipo MyModel que necesitas, con todos los tipos anidados definidos en el mismo archivo.
SwiftUI usa propiedades @Published y clases ObservableObject para dirigir la UI desde modelos de datos. El generador puede opcionalmente envolver la struct raíz en una clase ObservableObject con propiedades @Published.
El código de red con Combine y async/await en aplicaciones iOS modernas depende de objetos modelo bien tipados. La conformidad Codable generada aquí se integra directamente con URLSession.shared.data(from:) y JSONDecoder.