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
Eigen für C++: Vollständiger Leitfaden mit Beispielen
Pytest – Python-Testing für Einsteiger
Datenvalidierung in TypeScript: Bibliotheken, Ansätze und Codebeispiele
Echo für Go: Vollständiges Tutorial mit Praxisbeispielen
Rate limiting in Rust: Bibliotheken governor, leaky-bucket und Middleware für Webserver
Empfehlungen