Trabajo con CSV en Swift (iOS/macOS): librería SwiftCSV y fundamentos de parsing

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con CSV en Swift (iOS/macOS): librería SwiftCSV y fundamentos de parsing



CSV (Comma-Separated Values) es uno de los formatos más populares para almacenar datos tabulares. En el ecosistema de Apple (iOS, macOS), el trabajo con archivos CSV a menudo es necesario para importar datos de fuentes externas, exportar informes o cargar configuraciones. En este artículo, exploraremos la librería SwiftCSV, una solución ligera y conveniente para el parsing de CSV en Swift, así como ejemplos básicos de trabajo con este formato sin dependencias externas.



¿Qué es SwiftCSV?



SwiftCSV es una librería open-source para Swift que permite leer y procesar archivos CSV fácilmente. Soporta tanto el parsing de cadenas como el trabajo con archivos, detecta automáticamente los delimitadores (coma, tabulación, punto y coma) y proporciona una API conveniente para acceder a filas, columnas y celdas individuales.



Características principales:

  • Parsing de CSV desde una cadena, Data o URL (local o remota).
  • Soporte para encabezados de columna (primera fila como claves).
  • Manejo de comillas anidadas y caracteres escapados.
  • Posibilidad de elegir el delimitador (coma, tabulación, personalizado).
  • Mínimo número de dependencias (Swift puro).


Instalación de SwiftCSV



Agregue la librería a través de Swift Package Manager (SPM):

  1. En Xcode, seleccione File → Add Packages....
  2. Pegue la URL del repositorio: https://github.com/swiftcsv/SwiftCSV.git.
  3. Seleccione la versión (se recomienda la última estable).
  4. Agregue el paquete a su target.


O agréguelo en Package.swift:

dependencies: [    .package(url: "https://github.com/swiftcsv/SwiftCSV.git", from: "0.9.0")]


Ejemplo básico: lectura de CSV desde una cadena



Supongamos que tenemos una cadena CSV con datos de usuarios:

let csvString = """name,age,cityAlice,30,New YorkBob,25,Los AngelesCharlie,35,Chicago"""


La parseamos con SwiftCSV:

import SwiftCSV

do { let csv = try CSV(string: csvString) // Acceso a filas como diccionarios (claves = encabezados) for row in csv.rows { if let name = row["name"], let age = row["age"], let city = row["city"] { print("\\(name) (\\(age) años) vive en \\(city)") } }} catch { print("Error de parsing: \\(error)")}


Salida:

Alice (30 años) vive en New YorkBob (25 años) vive en Los AngelesCharlie (35 años) vive en Chicago


Lectura de CSV desde un archivo (iOS/macOS)



Para cargar un CSV desde un archivo local (por ejemplo, en la carpeta Documents o desde el bundle):

import SwiftCSV

// Ruta al archivo (por ejemplo, en Documents)let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("data.csv")

do { let csv = try CSV(url: fileURL) // Acceso a columnas let names = csv.columns["name"] ?? [] print("Todos los nombres: \\(names)")} catch { print("Error: \\(error)")}


Para un archivo del bundle:

if let path = Bundle.main.path(forResource: "data", ofType: "csv") {    let url = URL(fileURLWithPath: path)    let csv = try CSV(url: url)    // Trabajo con datos}


Delimitadores personalizados y configuración



Si su CSV usa tabulaciones o punto y coma, especifique el delimitador explícitamente:

// TSV (Tab-Separated Values)let tsv = try CSV(string: "name\\tageAlice\\t30", delimiter: .tab)

// Delimitador: punto y comalet csvSemicolon = try CSV(string: "name;ageAlice;30", delimiter: Character(";"))


También puede desactivar el parsing de encabezados (la primera fila será una fila normal):

let csvNoHead                    

Recommendations