Travailler avec YAML en Swift (iOS/macOS)
YAML (YAML Ain't Markup Language) est un format pratique de sérialisation de données, largement utilisé pour les fichiers de configuration, la description d'API et l'échange de données. Dans l'écosystème Swift pour iOS et macOS, plusieurs bibliothèques fiables sont disponibles pour analyser et générer du YAML. Dans cet article, nous examinerons les deux plus populaires : Yams et YamlSwift. Vous apprendrez à les installer dans votre projet, à effectuer un parsing de base, une sérialisation et à gérer les erreurs éventuelles.
1. Aperçu des bibliothèques
Yams
Yams est une bibliothèque moderne pour travailler avec YAML, entièrement écrite en Swift. Elle prend en charge la spécification YAML 1.2, inclut un lexer, un parser et des outils de sérialisation. Yams est activement maintenue par la communauté et convient parfaitement aux projets utilisant Swift Package Manager ou CocoaPods.
YamlSwift
YamlSwift est une bibliothèque plus légère, également entièrement écrite en Swift. Elle fournit une API minimaliste pour analyser des chaînes et fichiers YAML. YamlSwift est idéale pour les scénarios simples où le support complet de toutes les fonctionnalités YAML n'est pas nécessaire.
2. Installation
Les deux bibliothèques peuvent être installées via Swift Package Manager (SPM) ou CocoaPods. Examinons les deux options.
Installation via Swift Package Manager (recommandée)
Dans Xcode, ouvrez File → Add Packages et collez l'URL du dépôt :
- Yams :
https://github.com/jpsim/Yams.git - YamlSwift :
https://github.com/behrang/YamlSwift.git
Choisissez la version souhaitée (la dernière version stable est recommandée) et ajoutez le paquet à votre cible.
Installation via CocoaPods
Ajoutez la ligne à votre Podfile :
# Pour Yamspod 'Yams'
# Pour YamlSwiftpod 'YamlSwift'Exécutez ensuite pod install.
3. Parsing YAML avec Yams
Après l'installation, importez la bibliothèque dans votre fichier Swift :
import YamsParsing de base d'une chaîne
Supposons que nous ayons une chaîne YAML avec des informations sur un utilisateur :
let yamlString = """name: Ivan Petrovage: 30languages: - Swift - Python - JavaScript"""Le parsing s'effectue avec la fonction Yams.load(yaml:) :
do { if let result = try Yams.load(yaml: yamlString) as? [String: Any] { print("Nom : \\(result["name"] ?? "")") print("Âge : \\(result["age"] ?? 0)") if let languages = result["languages"] as? [String] { print("Langues : \\(languages.joined(separator: ", "))") } }} catch { print("Erreur de parsing YAML : \\(error.localizedDescription)")}Parsing depuis un fichier
Pour charger du YAML depuis un fichier dans le Bundle, utilisez :
guard let filePath = Bundle.main.path(forResource: "config", ofType: "yaml"), let yamlString = try? String(contentsOfFile: filePath, encoding: .utf8) else { fatalError("Fichier config.yaml introuvable")}
do { let config = try Yams.load(yaml: yamlString) as? [String: Any] // travail avec config} catch { print("Erreur : \\(error)")}4. Sérialisation (création de YAML) avec Yams
Yams permet également de reconvertir des objets Swift en chaîne YAML. Utilisez la fonction Yams.dump(object:) :
let dictionary: [String: Any] = [ "name": "Anna Smirnova", "age": 25, "skills": ["iOS", "macOS", "watchOS"]]
do { let yamlString = try Yams.dump(object: dictionary) print(yamlString)} catch { print("Erreur de sérialisation : \\(error)")}Le résultat ressemblera à ceci :
age: 25name: Anna Smirnovaskills:- Aussi dans la bibliothèque
Conteneur d'injection de dépendances pour Kotlin : Koin vs Kodein vs Dagger
Migrations de bases de données en TypeScript : TypeORM, Prisma et Drizzle
Traitement JSON en PHP : fonctions, exemples et meilleures pratiques
Génération Swagger/OpenAPI pour C# (.NET) : Swashbuckle et NSwag