Codable für Swift: Das komplette Tutorial mit Beispielen
1. Was ist Codable und warum braucht man es?
Codable ist ein eingebautes Protokoll (ein Typealias aus Encodable & Decodable) in Swift, das mit Swift 4 eingeführt wurde. Es bietet eine deklarative Möglichkeit, benutzerdefinierte Datentypen in Formate wie JSON, Property List (plist) und andere zu serialisieren und zu deserialisieren. Anstatt mühsam manuellen Code zu schreiben, um Strukturen in Wörterbücher und zurück zu konvertieren, generiert Codable die Kodierungs-/Dekodierungslogik automatisch basierend auf den Eigenschaften deines Modells.
Warum ist das wichtig? In der modernen iOS/macOS-Entwicklung interagiert fast jede App mit einer Server-API, die Daten im JSON-Format sendet und empfängt. Ohne Codable müsstest du manuell Schleifen schreiben, Typen prüfen, optionale Werte behandeln und einen eigenen Parser entwickeln. Codable löst dieses Problem, macht den Code sauberer, sicherer und reduziert die Entwicklungszeit erheblich. Es ist der De-facto-Standard für die Arbeit mit JSON im Apple-Ökosystem.
Codable basiert auf den Protokollen Encodable (zur Umwandlung von Swift-Typen in Daten) und Decodable (zur Umwandlung von Daten in Swift-Typen). Durch die Kombination beider erhältst du einen vollständigen Serialisierungszyklus. Das Protokoll ist eng mit JSONEncoder und JSONDecoder integriert, den wichtigsten Werkzeugen für die JSON-Arbeit.
2. Installation
Codable ist Teil der Swift-Standardbibliothek (Foundation). Es ist keine zusätzliche Installation erforderlich. Du musst weder pip, npm, CocoaPods noch den Swift Package Manager verwenden. Importiere einfach Foundation in deine Datei:
import Foundation
Wenn du Swift in einer Linux-Umgebung verwendest (z. B. über den Swift Package Manager), ist Codable ebenfalls sofort verfügbar. Auch serverseitige Frameworks wie Vapor nutzen Codable standardmäßig.
3. Schnellstart – Ein minimales Arbeitsbeispiel
Erstellen wir eine einfache Benutzerstruktur und serialisieren/deserialisieren sie in JSON.
import Foundation
// 1. Definiere ein Modell, das dem Codable-Protokoll entspricht
struct User: Codable {
let id: Int
let name: String
let email: String
}
// 2. Erstelle eine Instanz
let user = User(id: 1, name: "Alice", email: "alice@example.com")
// 3. Kodiere in JSON
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted // Für eine schöne Ausgabe
do {
let jsonData = try encoder.encode(user)
if let jsonString = String(data: jsonData, encoding: .utf8) {
print("JSON: \n\(jsonString)")
}
// 4. Dekodiere zurück
let decoder = JSONDecoder()
let decodedUser = try decoder.decode(User.self, from: jsonData)
print("Decodierter Benutzer: \(decodedUser.name), E-Mail: \(decodedUser.email)")
} catch {
print("Fehler: \(error)")
}
Konsolenausgabe:
JSON:
{
"id" : 1,
"name" : "Alice",
"email" : "alice@example.com"
}
Decodierter Benutzer: Alice, E-Mail: alice@example.com
Wie du siehst, reichen nur wenige Zeilen Code – und die Serialisierung ist fertig.
4. Wichtige Methoden/Funktionen/Klassen
Schauen wir uns die Schlüsselkomponenten von Codable an, die du ständig verwenden wirst.
4.1 JSONEncoder
Signatur: class JSONEncoder : NSCoder
Funktion: Wandelt Instanzen von Typen, die dem Encodable-Protokoll entsprechen, in ein Data-Objekt (JSON) um.
Auch in der Bibliothek
Dokka für Kotlin: Das komplette Tutorial mit Praxisbeispielen
CLI-Frameworks für Java: Picocli, JCommander und Spring Shell
Testen in C# (.NET): Vollständiger Überblick über Frameworks und Tools
Konfiguration von Java-Anwendungen: Bibliotheken und Werkzeuge
Arbeiten mit Daten in Swift: Foundation und DateFormatter
Empfehlungen