Trabajo con CSV en Swift (iOS/macOS) — bibliotecas y ejemplos de código

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): bibliotecas, análisis y ejemplos



CSV (Comma-Separated Values) es uno de los formatos más comunes para el intercambio de datos tabulares. En el ecosistema de Apple (iOS, macOS, watchOS), el trabajo con CSV a menudo se requiere para importar/exportar datos, cargar configuraciones o procesar registros. En este artículo, revisaremos los enfoques principales para trabajar con CSV en Swift: análisis manual, bibliotecas populares (SwiftCSV y CodableCSV) y ejemplos de código con explicaciones.



1. ¿Por qué usar bibliotecas para CSV?



La biblioteca estándar Foundation no proporciona herramientas listas para trabajar con CSV. El análisis manual (separación por comas, manejo de comillas, escape de caracteres) rápidamente se vuelve engorroso y propenso a errores. Las bibliotecas resuelven las siguientes tareas:

  • Manejo correcto de comillas y caracteres escapados.
  • Soporte para diferentes delimitadores (coma, tabulación, punto y coma).
  • Lectura de archivos grandes en flujo (sin cargarlos completamente en memoria).
  • Integración con Codable para deserialización automática.


2. Biblioteca SwiftCSV



SwiftCSV es una biblioteca ligera para leer y escribir CSV. Soporta líneas, diccionarios y arreglos anidados. Instalación a través de Swift Package Manager:

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


Ejemplo de lectura de CSV desde un archivo:

import SwiftCSV

guard let path = Bundle.main.path(forResource: "data", ofType: "csv") else { fatalError("CSV file not found")}let csv = try CSV(url: URL(fileURLWithPath: path))

// Acceso a filas por encabezadosfor row in csv.rows { let name = row["name"] ?? "" let age = row["age"] ?? "" print("\\(name) is \\(age) years old")}

// Acceso a columnaslet allNames = csv.columns["name"] ?? []print(allNames)


Escritura de CSV: la biblioteca no proporciona un método de escritura incorporado, pero puedes generar la cadena manualmente:

func writeCSV(rows: [[String: String]], headers: [String]) -> String {    var csvString = headers.joined(separator: ",") + ""    for row in rows {        let values = headers.map { row[$0] ?? "" }        csvString += values.joined(separator: ",") + ""    }    return csvString}

let csvData = writeCSV(rows: data, headers: ["name", "age"])try csvData.write(to: url, atomically: true, encoding: .utf8)


3. Biblioteca CodableCSV



CodableCSV es una biblioteca potente que soporta Codable, delimitadores personalizados, lectura en flujo y codificación configurable. Ideal para proyectos complejos.



Instalación:

// Package.swiftdependencies: [    .package(url: "https://github.com/dehesa/CodableCSV.git", from: "0.9.0")]


Ejemplo de lectura con deserialización automática a un modelo:

import CodableCSV

struct Person: Codable { let name: String let age: Int let email: String?}

let data = try Data(contentsOf: url)let decoder = CSVDecoder { config in config.headerStrategy = .firstLine // primera línea son encabezados config.delimiter = .comma}let people = try decoder.decode([Person].self, from: data)

for person in people { print(person.name, person.age)}


Escritura de CSV con CodableCSV:

let encoder = CSVEncoder { config in    config.headerStrategy = .firstLine    config.delimiter = .comma}let data = try encoder.encode(people, into: Data.self)try data.write(to: url, options: .atomic)


4. Análisis manual (sin bibliotecas)



Si el proyecto es pequeño y deseas evitar dependencias, puedes implementar un analizador simple.

Recommendations