Arbeit mit CSV in Swift (iOS/macOS): Bibliotheken und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit CSV in Swift (iOS/macOS): vom Einfachen zum Komplexen



CSV (Comma-Separated Values) ist eines der am weitesten verbreiteten Formate für den Austausch von Tabellendaten. Es wird für den Export aus Excel, Google Sheets, Datenbanken und einfachen Logs verwendet. Im Swift-Ökosystem (iOS, macOS, watchOS, tvOS) gibt es kein integriertes Modul für die Arbeit mit CSV, aber es gibt mehrere bewährte Bibliotheken, die diesen Prozess erheblich vereinfachen. In diesem Artikel betrachten wir die besten Werkzeuge und schreiben einige Codebeispiele.



Warum sollte man keinen CSV-Parser selbst schreiben?

Auf den ersten Blick erscheint CSV einfach: Zeile durch Kommas trennen – und fertig. In der Praxis treten jedoch Schwierigkeiten auf:

  • Felder können Kommas enthalten (z.B. "Smith, John").
  • Felder können in Anführungszeichen eingeschlossen sein, und innerhalb der Anführungszeichen können escaped Anführungszeichen vorkommen ("").
  • Verschiedene Systeme verwenden unterschiedliche Trennzeichen (Komma, Semikolon, Tabulator).
  • Probleme mit Kodierungen (UTF-8, UTF-16, Windows-1251).

Daher wird für Produktionscode dringend empfohlen, eine fertige Bibliothek zu verwenden.



Beste Bibliotheken für CSV in Swift



1. SwiftCSV (von Naoto Kaneko)

Eine der beliebtesten und leichtesten Bibliotheken. Unterstützt Lesen und Schreiben, verarbeitet automatisch Anführungszeichen und Escaping. Funktioniert über Swift Package Manager (SPM) und CocoaPods.

// Einbindung über SPM: .package(url: "https://github.com/naoty/SwiftCSV.git", from: "0.9.0")


2. CodableCSV (von Dehesa)

Eine moderne Bibliothek, die sich in das Codable-Protokoll integriert. Ermöglicht das direkte Parsen von CSV in Swift-Strukturen. Ideal für Projekte, bei denen Daten streng typisiert sind.

// Einbindung: .package(url: "https://github.com/dehesa/CodableCSV.git", from: "0.6.0")


3. CSwift

Eine einfache und schnelle Bibliothek mit minimaler API. Gut geeignet für kleine Projekte oder schnelles Prototyping.



Beispiel 1: CSV lesen mit SwiftCSV

Angenommen, wir haben eine Datei users.csv:

id,name,email1,Ivan Ivanov,ivan@example.com2,Maria Petrova,maria@example.com3,John Doe,"john.doe@example.com"


Code zum Lesen:

import SwiftCSV

guard let csvURL = Bundle.main.url(forResource: "users", withExtension: "csv") else { print("Datei nicht gefunden") return}

do { let csv = try CSV(url: csvURL) // Zugriff auf Zeilen als Array von Wörterbüchern for row in csv.rows { if let id = row["id"], let name = row["name"], let email = row["email"] { print("ID: \\(id), Name: \\(name), Email: \\(email)") } } // Oder Zugriff über Spalten print("Alle Namen: \\(csv.columns["name"] ?? [])")} catch { print("Parsing-Fehler: \\(error)")}


Beispiel 2: CSV schreiben mit SwiftCSV

import SwiftCSV

let headers = ["Name", "Alter", "Stadt"]let rows = [ ["Anna", "28", "Moskau"], ["Boris", "35", "Sankt Petersburg"], ["Viktor", "22", "Nowosibirsk"]]

do { let csv = try CSV(string: "", headers: headers, rows: rows) let csvString = csv.output // CSV-String erhalten print(csvString) // In Datei speichern let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let fileURL = documentsPath.appendingPathComponent("output.csv") try csvString.write(to: fileURL, atomically: true, encoding: .utf8) print("Datei gespeichert: \\(fileURL)")} catch { print("Schreibfehler: \\(error)")}


Beispiel 3: CodableCSV — Parsen in Strukturen

Dieses Beispiel zeigt, wie einfach CSV mit Datenmodellen integriert werden kann:

import CodableCSV

struct User: Decodable { let id: Int let name: String let email: String}\

Empfehlungen