Работа с CSV в Swift (iOS/macOS): библиотека SwiftCSV и основы парсинга

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с CSV в Swift (iOS/macOS): библиотека SwiftCSV и основы парсинга

CSV (Comma-Separated Values) — один из самых популярных форматов для хранения табличных данных. В экосистеме Apple (iOS, macOS) работа с CSV-файлами часто требуется для импорта данных из внешних источников, экспорта отчетов или загрузки конфигураций. В этой статье мы рассмотрим библиотеку SwiftCSV — легковесное и удобное решение для парсинга CSV в Swift, а также базовые примеры работы с этим форматом без сторонних зависимостей.

Что такое SwiftCSV?

SwiftCSV — это open-source библиотека для Swift, которая позволяет легко читать и обрабатывать CSV-файлы. Она поддерживает как строковый парсинг, так и работу с файлами, автоматически определяет разделители (запятая, табуляция, точка с запятой) и предоставляет удобный API для доступа к строкам, столбцам и отдельным ячейкам.

Основные возможности:

  • Парсинг CSV из строки, Data или URL (локального или удаленного).
  • Поддержка заголовков столбцов (первая строка как ключи).
  • Работа с вложенными кавычками и экранированными символами.
  • Возможность выбора разделителя (запятая, табуляция, пользовательский).
  • Минимальное количество зависимостей (чистый Swift).

Установка SwiftCSV

Добавьте библиотеку через Swift Package Manager (SPM):

  1. В Xcode выберите File → Add Packages....
  2. Вставьте URL репозитория: https://github.com/swiftcsv/SwiftCSV.git.
  3. Выберите версию (рекомендуется последняя стабильная).
  4. Добавьте пакет в ваш таргет.

Или добавьте в Package.swift:

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

Базовый пример: чтение CSV из строки

Допустим, у нас есть CSV-строка с данными о пользователях:

let csvString = """
name,age,city
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago
"""

Парсим её с помощью SwiftCSV:

import SwiftCSV

do {
    let csv = try CSV(string: csvString)
    // Доступ к строкам как словарям (ключи — заголовки)
    for row in csv.rows {
        if let name = row["name"], let age = row["age"], let city = row["city"] {
            print("\(name) (\(age) лет) живет в \(city)")
        }
    }
} catch {
    print("Ошибка парсинга: \(error)")
}

Вывод:

Alice (30 лет) живет в New York
Bob (25 лет) живет в Los Angeles
Charlie (35 лет) живет в Chicago

Чтение CSV из файла (iOS/macOS)

Для загрузки CSV из локального файла (например, в папке Documents или из бандла):

import SwiftCSV

// Путь к файлу (например, в Documents)
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("data.csv")

do {
    let csv = try CSV(url: fileURL)
    // Доступ к столбцам
    let names = csv.columns["name"] ?? []
    print("Все имена: \(names)")
} catch {
    print("Ошибка: \(error)")
}

Для файла из бандла:

if let path = Bundle.main.path(forResource: "data", ofType: "csv") {
    let url = URL(fileURLWithPath: path)
    let csv = try CSV(url: url)
    // Работа с данными
}

Кастомные разделители и настройки

Если ваш CSV использует табуляцию или точку с запятой, укажите разделитель явно:

// TSV (Tab-Separated Values)
let tsv = try CSV(string: "name\tage\nAlice\t30", delimiter: .tab)

// Разделитель — точка с запятой
let csvSemicolon = try CSV(string: "name;age\nAlice;30", delimiter: Character(";"))

Также можно отключить парсинг заголовков (первая строка будет обычной строкой):

let csvNoHeader = try CSV(string: "Alice,30", loadColumns: false)
// Доступ через csvNoHeader.rows — массив массивов строк

Обработка ошибок и экранирование

SwiftCSV

Рекомендаций