Home » Guías » Codable (I), cargando un JSON hacia un struct
Codable (I)

Codable (I), cargando un JSON hacia un struct

Codable es una de las grandes novedades de iOS 11 en la Fundación de Swift. Un protocolo que, conformado con una clase o struct, permite que esta pueda generar instancias a partir de datos en un archivo JSON. Básicamente, el clásico concepto de la serialización de instancias, llevado a los nuevos tipos de Swift y sacando todo el partido al unirlo al formato estándar JSON.

La gran ventaja es que Codable es un protocolo que incorpora dos implementaciones a través de extensiones de protocolos, que permite cargar de un JSON a instancias y de instancias hacia JSON con sus datos. Como vimos en esta guía ya publicada para Swift 3 (pulsando aquí), en vez de cargar un JSON en un diccionario con JSONSerialization o un array de diccionarios y tener que acceder a las claves por cadenas y controlar opcionales, lo que tenemos es que **de un JSON podemos tener creadas todas las instancias necesarias y acceder a las propiedades como tales en una estructura de tipo de dato reconocible por todo el sistema.

Ejemplo

Vamos a suponer que tenemos un fichero MOCK_DATA que tiene la siguiente estructura:

Esa estructura es un array de diccionarios, pero en nuestro caso podemos crear la estructura directamente en un struct y crear todas las instancias del tipo directamente. Para ello creamos el struct:

Es un struct convencional con una diferencia clave: está conformado a Codable. Un protocolo cuya obligatoriedad son dos funciones decode y encode que a través de extensiones de protocolos dan una implementación por defecto. Y si nos fijamos, el struct tiene los mismos nombres de campos que tenemos en el JSON. Ahora hacemos la carga.

Ya está. Cargamos en formato Data el contenido del fichero MOCK_DATA que tenemos en el Bundle (como se haría normalmente para pasarle este tipo a JSONSerialization), pero en vez de eso creamos un JSONDecoder e invocamos el método decode diciéndole que queremos recuperar un array de tipos Mock (usando el .self para acceder a la definición del propio tipo).

Desde luego una implementación no solo sencilla, sino práctica y limpia, porque nos permite no trabajar con diccionarios sino directamente con un tipo de dato asociado. En otras pequeñas guías veremos cómo hacer la operación contraria y personalizar la carga o descarga.

Probadlo y ya nos comentaréis qué os ha parecido. Un saludo y Good Apple Coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

Drag & Drop

Drag & Drop (I): Introducción y Drag

Iniciamos una serie de guías que explican todo lo presentado en la WWDC y cómo usarlo o cómo funciona. Explicado, esta vez, con nuestro primer screencast, un vídeo explicativo y práctico con Xcode 9, que te ayudará a seguir los pasos para implementar el drag de una app a otra y entender cómo está configurado y funciona. No os olvidéis de suscribiros a nuestro canal de Youtube si queréis ver más contenidos.