Trabalhando com CSV em Swift (iOS/macOS): bibliotecas e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com CSV em Swift (iOS/macOS): do simples ao complexo



CSV (Comma-Separated Values) é um dos formatos mais comuns para troca de dados tabulares. Ele é usado para exportação do Excel, Google Sheets, bancos de dados e logs simples. No ecossistema Swift (iOS, macOS, watchOS, tvOS) não há um módulo nativo para trabalhar com CSV, mas existem várias bibliotecas testadas que simplificam bastante esse processo. Neste artigo, vamos explorar as melhores ferramentas e escrever alguns exemplos de código.



Por que não escrever um parser CSV manualmente?

À primeira vista, o CSV parece simples: basta dividir a linha por vírgulas e pronto. No entanto, na prática surgem dificuldades:

  • Os campos podem conter vírgulas internas (por exemplo, "Smith, John").
  • Os campos podem estar entre aspas, e dentro das aspas pode haver aspas escapadas ("").
  • Sistemas diferentes usam delimitadores diferentes (vírgula, ponto e vírgula, tabulação).
  • Problemas com codificações (UTF-8, UTF-16, Windows-1251).

Portanto, para código em produção, é altamente recomendável usar uma biblioteca pronta.



Melhores bibliotecas para CSV em Swift



1. SwiftCSV (de Naoto Kaneko)

Uma das bibliotecas mais populares e leves. Suporta leitura e escrita, lida automaticamente com aspas e escapamento. Funciona com Swift Package Manager (SPM) e CocoaPods.

// Conexão via SPM: .package(url: "https://github.com/naoty/SwiftCSV.git", from: "0.9.0")


2. CodableCSV (de Dehesa)

Uma biblioteca moderna que se integra ao protocolo Codable. Permite fazer parsing de CSV diretamente para estruturas Swift. Ideal para projetos onde os dados têm tipagem estrita.

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


3. CSwift

Uma biblioteca simples e rápida com uma API mínima. Adequada para projetos pequenos ou prototipagem rápida.



Exemplo 1: Leitura de CSV com SwiftCSV

Suponha que temos um arquivo users.csv:

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


Código para leitura:

import SwiftCSV

guard let csvURL = Bundle.main.url(forResource: "users", withExtension: "csv") else { print("Arquivo não encontrado") return}

do { let csv = try CSV(url: csvURL) // Acesso às linhas como um array de dicionários for row in csv.rows { if let id = row["id"], let name = row["name"], let email = row["email"] { print("ID: \\(id), Nome: \\(name), Email: \\(email)") } } // Ou acesso por colunas print("Todos os nomes: \\(csv.columns["name"] ?? [])")} catch { print("Erro de parsing: \\(error)")}


Exemplo 2: Escrita de CSV com SwiftCSV

import SwiftCSV

let headers = ["Nome", "Idade", "Cidade"]let rows = [ ["Ana", "28", "Moscou"], ["Boris", "35", "São Petersburgo"], ["Viktor", "22", "Novosibirsk"]]

do { let csv = try CSV(string: "", headers: headers, rows: rows) let csvString = csv.output // Obtém a string CSV print(csvString) // Salva em arquivo 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("Arquivo salvo: \\(fileURL)")} catch { print("Erro de escrita: \\(error)")}


Exemplo 3: CodableCSV — parsing em estruturas

Este exemplo mostra como é fácil integrar CSV com modelos de dados:

import CodableCSV

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

Recommendations