Swift:
Trabalhando com CSV

Como fazer:

Em Swift, não há suporte nativo para a análise de arquivos CSV diretamente, mas você pode manipular dados CSV usando os métodos de String para dividir o conteúdo, ou por meio de bibliotecas de terceiros como SwiftCSV para uma abordagem mais simplificada. Aqui estão ambos os métodos:

Análise Manual sem Bibliotecas Externas

// Considere uma simples string CSV
let csvString = """
name,age,city
John Doe,29,New York
Jane Smith,34,Los Angeles
"""

// Divida a string CSV em linhas
let rows = csvString.components(separatedBy: "\n")

// Extraia as chaves da primeira linha
let keys = rows.first?.components(separatedBy: ",")

// Itere sobre as linhas começando da segunda
var result: [[String: String]] = []
for row in rows.dropFirst() {
    let values = row.components(separatedBy: ",")
    let dict = Dictionary(uniqueKeysWithValues: zip(keys!, values))
    result.append(dict)
}

// Saída de Exemplo
print(result)
// Saída: [{"city": "New York", "age": "29", "name": "John Doe"}, {"city": "Los Angeles", "age": "34", "name": "Jane Smith"}]

Essa abordagem é direta, mas carece de robustez, especialmente com arquivos CSV contendo casos especiais como vírgulas nos valores, quebras de linha dentro dos campos, etc.

Usando a Biblioteca SwiftCSV

Primeiro, adicione SwiftCSV ao seu projeto incluindo-o em suas dependências do Package.swift:

.package(url: "https://github.com/swiftcsv/SwiftCSV.git", from: "0.5.6")

Então, importe e use da seguinte forma:

import SwiftCSV

// Assuma que `csvString` esteja definido como acima

// Crie um objeto CSV
if let csv = try? CSV(string: csvString) {
    // Acesse as linhas como dicionários
    let rows = csv.namedRows
    
    // Saída de Exemplo
    print(rows)
    // Saída: [{"city": "New York", "age": "29", "name": "John Doe"}, {"city": "Los Angeles", "age": "34", "name": "Jane Smith"}]
}

SwiftCSV simplifica a análise ao lidar automaticamente com nuances como vírgulas encapsuladas, quebras de linha em campos e codificação de caracteres. No entanto, lembre-se de tratar possíveis erros em aplicações do mundo real, especialmente ao lidar com fontes de dados externas.