Trabalhando com CSV em Swift (iOS/macOS) — bibliotecas e exemplos de código

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): bibliotecas, análise e exemplos



CSV (Comma-Separated Values) — um dos formatos mais comuns para troca de dados tabulares. No ecossistema Apple (iOS, macOS, watchOS), trabalhar com CSV é frequentemente necessário para importação/exportação de dados, carregamento de configurações ou processamento de logs. Neste artigo, abordaremos as principais abordagens para trabalhar com CSV em Swift: análise manual, bibliotecas populares (SwiftCSV e CodableCSV) e exemplos de código com explicações.



1. Por que usar bibliotecas para CSV?



A biblioteca padrão Foundation não fornece ferramentas prontas para trabalhar com CSV. A análise manual (separação por vírgulas, tratamento de aspas, escape de caracteres) rapidamente se torna complicada e propensa a erros. As bibliotecas resolvem os seguintes problemas:

  • Tratamento correto de aspas e caracteres escapados.
  • Suporte a diferentes delimitadores (vírgula, tabulação, ponto e vírgula).
  • Leitura de arquivos grandes de forma contínua (sem carregar tudo na memória).
  • Integração com Codable para desserialização automática.


2. Biblioteca SwiftCSV



SwiftCSV — uma biblioteca leve para leitura e escrita de CSV. Suporta linhas, dicionários e arrays aninhados. Instalação via Swift Package Manager:

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


Exemplo de leitura de CSV de um arquivo:

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))

// Acesso às linhas pelos cabeçalhosfor row in csv.rows { let name = row["name"] ?? "" let age = row["age"] ?? "" print("\\(name) is \\(age) years old")}

// Acesso às colunaslet allNames = csv.columns["name"] ?? []print(allNames)


Escrita de CSV: a biblioteca não fornece um método de escrita embutido, mas você pode formar a string 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 — uma biblioteca poderosa que suporta Codable, delimitadores personalizados, leitura contínua e codificação configurável. Ideal para projetos complexos.



Instalação:

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


Exemplo de leitura com desserialização automática para um 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 // primeira linha — cabeçalhos config.delimiter = .comma}let people = try decoder.decode([Person].self, from: data)

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


Escrita de CSV com 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álise manual (sem bibliotecas)



Se o projeto for pequeno e você quiser evitar dependências, é possível implementar um analisador simples.

Recommendations