Trabajo con CSV en Swift (iOS/macOS): bibliotecas y ejemplos

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): de lo simple a lo complejo



CSV (Comma-Separated Values) es uno de los formatos más comunes para el intercambio de datos tabulares. Se utiliza para exportar desde Excel, Google Sheets, bases de datos y registros simples. En el ecosistema Swift (iOS, macOS, watchOS, tvOS) no hay un módulo integrado para trabajar con CSV, pero existen varias bibliotecas probadas que simplifican enormemente este proceso. En este artículo, revisaremos las mejores herramientas y escribiremos varios ejemplos de código.



¿Por qué no deberías escribir un analizador CSV manualmente?

A primera vista, CSV parece simple: se divide la cadena por comas y listo. Sin embargo, en la práctica surgen complicaciones:

  • Los campos pueden contener comas internas (por ejemplo, "Smith, John").
  • Los campos pueden estar entre comillas, y dentro de las comillas puede haber comillas escapadas ("").
  • Diferentes sistemas usan diferentes delimitadores (coma, punto y coma, tabulación).
  • Problemas con las codificaciones (UTF-8, UTF-16, Windows-1251).

Por lo tanto, para código en producción se recomienda encarecidamente usar una biblioteca ya preparada.



Las mejores bibliotecas para CSV en Swift



1. SwiftCSV (de Naoto Kaneko)

Una de las bibliotecas más populares y ligeras. Soporta lectura y escritura, maneja automáticamente comillas y escapes. Funciona con Swift Package Manager (SPM) y CocoaPods.

// Conexión a través de SPM: .package(url: "https://github.com/naoty/SwiftCSV.git", from: "0.9.0")


2. CodableCSV (de Dehesa)

Una biblioteca moderna que se integra con el protocolo Codable. Permite analizar CSV directamente en estructuras Swift. Ideal para proyectos donde los datos tienen una tipificación estricta.

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


3. CSwift

Una biblioteca simple y rápida con una API mínima. Es adecuada para proyectos pequeños o prototipado rápido.



Ejemplo 1: Lectura de CSV con SwiftCSV

Supongamos que tenemos un archivo users.csv:

id,name,email1,Iván Ivanov,ivan@example.com2,María Petrova,maria@example.com3,John Doe,"john.doe@example.com"


Código para leer:

import SwiftCSV

guard let csvURL = Bundle.main.url(forResource: "users", withExtension: "csv") else { print("Archivo no encontrado") return}

do { let csv = try CSV(url: csvURL) // Acceso a las filas como un array de diccionarios for row in csv.rows { if let id = row["id"], let name = row["name"], let email = row["email"] { print("ID: \\(id), Nombre: \\(name), Email: \\(email)") } } // O acceso por columnas print("Todos los nombres: \\(csv.columns["name"] ?? [])")} catch { print("Error de análisis: \\(error)")}


Ejemplo 2: Escritura de CSV con SwiftCSV

import SwiftCSV

let headers = ["Name", "Age", "City"]let rows = [ ["Ana", "28", "Moscú"], ["Boris", "35", "San Petersburgo"], ["Víctor", "22", "Novosibirsk"]]

do { let csv = try CSV(string: "", headers: headers, rows: rows) let csvString = csv.output // Obtenemos la cadena CSV print(csvString) // Guardamos en un archivo 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("Archivo guardado: \\(fileURL)")} catch { print("Error de escritura: \\(error)")}


Ejemplo 3: CodableCSV — análisis en estructuras

Este ejemplo muestra lo fácil que es integrar CSV con modelos de datos:

import CodableCSV

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

Recommendations