Arbeit mit YAML in Swift (iOS/macOS)
YAML (YAML Ain't Markup Language) ist ein praktisches Daten-Serialisierungsformat, das häufig für Konfigurationsdateien, API-Beschreibungen und Datenaustausch verwendet wird. Im Swift-Ökosystem für iOS und macOS stehen mehrere zuverlässige Bibliotheken zur Verfügung, die das Parsen und Generieren von YAML ermöglichen. In diesem Artikel betrachten wir die beiden beliebtesten: Yams und YamlSwift. Sie erfahren, wie Sie diese in Ihr Projekt einbinden, grundlegendes Parsing und Serialisierung durchführen und mögliche Fehler behandeln.
1. Überblick über die Bibliotheken
Yams
Yams ist eine moderne Bibliothek für die Arbeit mit YAML, die vollständig in Swift geschrieben ist. Sie unterstützt die YAML 1.2-Spezifikation und enthält einen Lexer, Parser sowie Werkzeuge zur Serialisierung. Yams wird aktiv von der Community unterstützt und eignet sich hervorragend für Projekte, die Swift Package Manager oder CocoaPods verwenden.
YamlSwift
YamlSwift ist eine leichtere Bibliothek, die ebenfalls vollständig in Swift geschrieben ist. Sie bietet eine minimalistische API zum Parsen von YAML-Strings und -Dateien. YamlSwift ist ideal für einfache Szenarien, in denen keine vollständige Unterstützung aller YAML-Funktionen erforderlich ist.
2. Installation
Beide Bibliotheken können über Swift Package Manager (SPM) oder CocoaPods installiert werden. Betrachten wir beide Optionen.
Installation über Swift Package Manager (empfohlen)
Öffnen Sie in Xcode File → Add Packages und fügen Sie die Repository-URL ein:
- Yams:
https://github.com/jpsim/Yams.git - YamlSwift:
https://github.com/behrang/YamlSwift.git
Wählen Sie die gewünschte Version (empfohlen wird die neueste stabile Version) und fügen Sie das Paket zu Ihrem Target hinzu.
Installation über CocoaPods
Fügen Sie die folgende Zeile in Ihre Podfile ein:
# Für Yamspod 'Yams'
# Für YamlSwiftpod 'YamlSwift'Führen Sie anschließend pod install aus.
3. YAML-Parsing mit Yams
Importieren Sie nach der Installation die Bibliothek in Ihre Swift-Datei:
import YamsBasis-Parsing eines Strings
Angenommen, wir haben einen YAML-String mit Benutzerinformationen:
let yamlString = """name: Iwan Petrowalter: 30sprachen: - Swift - Python - JavaScript"""Das Parsing erfolgt mit der Funktion Yams.load(yaml:):
do { if let result = try Yams.load(yaml: yamlString) as? [String: Any] { print("Name: \\(result["name"] ?? "")") print("Alter: \\(result["alter"] ?? 0)") if let sprachen = result["sprachen"] as? [String] { print("Sprachen: \\(sprachen.joined(separator: ", "))") } }} catch { print("YAML-Parsing-Fehler: \\(error.localizedDescription)")}Parsing aus einer Datei
Zum Laden von YAML aus einer Datei im Bundle verwenden Sie:
guard let filePath = Bundle.main.path(forResource: "config", ofType: "yaml"), let yamlString = try? String(contentsOfFile: filePath, encoding: .utf8) else { fatalError("Datei config.yaml nicht gefunden")}
do { let config = try Yams.load(yaml: yamlString) as? [String: Any] // Arbeit mit config} catch { print("Fehler: \\(error)")}4. Serialisierung (YAML-Erstellung) mit Yams
Yams ermöglicht auch die Konvertierung von Swift-Objekten zurück in einen YAML-String. Verwenden Sie die Funktion Yams.dump(object:):
let dictionary: [String: Any] = [ "name": "Anna Smirnowa", "alter": 25, "fähigkeiten": ["iOS", "macOS", "watchOS"]]
do { let yamlString = try Yams.dump(object: dictionary) print(yamlString)} catch { print("Serialisierungsfehler: \\(error)")}Das Ergebnis sieht wie folgt aus:
alter: 25name: Anna Smirnowafähigkeiten:- Auch in der Bibliothek
Testen in PHP: Überblick über Frameworks und Tools (PHPUnit, Pest, Codeception)
PDF-Berichte in Java mit iText und Apache PDFBox generieren
Gorilla Mux für Go: Vollständige Anleitung mit Beispielen
Arbeiten mit ZIP/Archiven in TypeScript: vollständige Anleitung zu JSZip und adm-zip