Travailler avec YAML en Swift : bibliothèque Yams pour iOS/macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec YAML en Swift (iOS/macOS) : bibliothèque Yams

\n\n

YAML (YAML Ain't Markup Language) est un format pratique de sérialisation de données, souvent utilisé pour les fichiers de configuration, la description des dépendances (par exemple, docker-compose.yml), ainsi que dans les projets nécessitant une structure de données lisible et concise. Dans l'écosystème Apple, plusieurs bibliothèques existent pour travailler avec YAML en Swift, mais la plus populaire et la plus stable est Yams — une bibliothèque rapide et simple d'utilisation, écrite en Swift pur.

\n\n

Qu'est-ce que Yams ?

\n\n

Yams est une bibliothèque open source qui offre un support complet pour le parsing et la sérialisation de YAML en Swift. Elle est compatible avec iOS, macOS, tvOS et watchOS. Yams prend en charge la spécification YAML 1.2 et permet de convertir des chaînes YAML en structures Swift (dictionnaires, tableaux, chaînes, nombres, booléens) et inversement.

\n\n

Principales fonctionnalités de Yams :

\n
    \n
  • Parsing d'une chaîne YAML en Any (généralement [String: Any] ou [Any]).
  • \n
  • Sérialisation d'objets Swift en YAML.
  • \n
  • Support des structures imbriquées, des tableaux, des documents multiples.
  • \n
  • Gestion des erreurs avec des messages détaillés.
  • \n
  • Entièrement compatible avec Swift Package Manager (SPM) et CocoaPods.
  • \n
\n\n

Installation de Yams dans le projet

\n\n

Vous pouvez installer Yams via Swift Package Manager (recommandé) ou CocoaPods.

\n\n

Via Swift Package Manager

\n\n
    \n
  1. Dans Xcode, sélectionnez File → Add Packages.
  2. \n
  3. Collez l'URL du dépôt : https://github.com/jpsim/Yams.git
  4. \n
  5. Choisissez la version (la dernière version stable est recommandée) et cliquez sur Add Package.
  6. \n
\n\n

Ou ajoutez la dépendance dans Package.swift :

\n\n
// swift-tools-version:5.7\nimport PackageDescription\n\nlet package = Package(\n    name: "MyProject",\n    dependencies: [\n        .package(url: "https://github.com/jpsim/Yams.git", from: "5.0.0")\n    ],\n    targets: [\n        .target(\n            name: "MyProject",\n            dependencies: ["Yams"])\n    ]\n)
\n\n

Via CocoaPods

\n\n

Ajoutez la ligne dans votre Podfile :

\n\n
pod 'Yams', '~> 5.0'
\n\n

Exécutez ensuite pod install.

\n\n

Utilisation de base : parsing YAML

\n\n

Après l'installation, importez la bibliothèque et utilisez Yams.load(yaml:) pour analyser une chaîne.

\n\n
import Yams\n\nlet yamlString = """\nname: Swift\ntype: language\nversions:\n  - 5.5\n  - 5.6\n  - 5.7\nfeatures:\n  protocol_oriented: true\n  value_semantics: true\n"""\n\ndo {\n    if let data = try Yams.load(yaml: yamlString) as? [String: Any] {\n        print("Name: \\(data["name"] ?? "")")\n        print("Versions: \\(data["versions"] ?? [])")\n        if let features = data["features"] as? [String: Bool] {\n            print("Protocol oriented: \\(features["protocol_oriented"] ?? false)")\n        }\n    }\n} catch {\n    print("Erreur de parsing YAML : \\(error.localizedDescription)")\n}
\n\n

Résultat de l'exécution :

\n
Name: Swift\nVersions: [5.5, 5.6, 5.7]\nProtocol oriented: true
\n\n

Sérialisation d'objets Swift en YAML

\n\n

Pour la conversion inverse, utilisez Yams.dump(object:) :

\n\n
import Yams\n\nlet dictionary: [String: Any] = [\n    "app": "MyApp",\n    "version": 2.0,\n    "features": ["dark_mode", "notifications"],\n    "settings": [\n        "autosave": true,\n        "timeout": 30\n    ]\n]\n\ndo {\n    let yamlString = try Yams.dump(object: dictionary)\n    print(yamlString)\n} catch {\n    print("Erreur de sérialisation : \\(error.localizedDescription)")\n}
\n\n

Sortie :

\n
app: MyApp\nfeatures:\n  - dark_mode\n  - notifications\nsettings:\n  autosave: true\n  timeout: 30\n                    

Recommendations