Swift Codable et le pattern CodingKeys
Le protocole Codable de Swift (alias de type pour Encodable & Decodable) est la façon standard d'analyser JSON. Le générateur produit des types struct ou class conformes à Codable avec un enum CodingKeys quand les noms de propriétés diffèrent des clés JSON. La convention de nommage Swift utilise lowerCamelCase pour les propriétés, donc "first_name" en JSON se mappe à firstName en Swift, avec un case CodingKeys reliant les deux.
Le mappage de types suit les conventions Swift : les chaînes JSON deviennent String, les entiers Int, les décimaux Double, les booléens Bool, et les tableaux [T]. Les objets imbriqués génèrent leurs propres types struct nommés. JSON null et les champs manquants se mappent à Optional (T?) avec une valeur par défaut nil dans l'initialiseur.
Le générateur peut produire des déclarations struct (type valeur, par défaut) ou class (type référence). Les structs sont préférées en Swift pour les modèles de données car elles ont une sémantique de valeur, sont automatiquement thread-safe et évitent les cycles de rétention.
CodingKeys, décodeurs personnalisés et gestion des dates
Quand un nom de propriété dans une struct Swift diffère de sa clé JSON, un enum CodingKeys est généré listant le mapping pour chaque propriété. C'est l'approche Swift standard compatible avec JSONDecoder.
Une alternative est de définir keyDecodingStrategy sur JSONDecoder à .convertFromSnakeCase, ce qui élimine le besoin de CodingKeys quand les seules différences sont snake_case vs camelCase. Le générateur peut émettre un commentaire notant cette option quand elle s'applique.
Les chaînes de date JSON sont un défi courant. Le générateur type les champs de date comme String par défaut, mais un toggle les bascule vers Date et émet une note pour définir dateDecodingStrategy sur JSONDecoder.
Flux de travail de développement iOS et SwiftUI
Les développeurs iOS utilisant URLSession ou Alamofire analysent les réponses API avec JSONDecoder().decode(MyModel.self, from: data). Le générateur produit le type MyModel dont vous avez besoin, avec tous les types imbriqués définis dans le même fichier.
SwiftUI utilise des propriétés @Published et des classes ObservableObject pour piloter l'UI depuis les modèles de données. Le générateur peut optionnellement envelopper la struct racine dans une classe ObservableObject avec des propriétés @Published.
Le code réseau Combine et async/await dans les applications iOS modernes repose sur des objets modèles bien typés. La conformité Codable générée ici s'intègre directement avec URLSession.shared.data(from:) et JSONDecoder.