Работа с YAML в Swift (iOS/macOS) — библиотеки Yams и YamlSwift

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

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

Начать курс

Работа с YAML в Swift (iOS/macOS)

YAML (YAML Ain't Markup Language) — это удобный формат сериализации данных, широко применяемый для конфигурационных файлов, описания API и обмена данными. В экосистеме Swift для iOS и macOS доступно несколько надёжных библиотек, позволяющих парсить и генерировать YAML. В этой статье мы рассмотрим две самые популярные: Yams и YamlSwift. Вы узнаете, как установить их в проект, выполнить базовый парсинг, сериализацию и обработать возможные ошибки.

1. Обзор библиотек

Yams

Yams — это современная библиотека для работы с YAML, написанная полностью на Swift. Она поддерживает спецификацию YAML 1.2, включает в себя лексер, парсер и средства для сериализации. Yams активно поддерживается сообществом и отлично подходит для проектов, использующих Swift Package Manager или CocoaPods.

YamlSwift

YamlSwift — более лёгкая библиотека, которая также полностью написана на Swift. Она предоставляет минималистичный API для парсинга YAML-строк и файлов. YamlSwift идеальна для простых сценариев, когда не требуется полная поддержка всех возможностей YAML.

2. Установка

Обе библиотеки можно установить через Swift Package Manager (SPM) или CocoaPods. Рассмотрим оба варианта.

Установка через Swift Package Manager (рекомендуется)

В Xcode откройте File → Add Packages и вставьте URL репозитория:

  • Yams: https://github.com/jpsim/Yams.git
  • YamlSwift: https://github.com/behrang/YamlSwift.git

Выберите нужную версию (рекомендуется последняя стабильная) и добавьте пакет в ваш target.

Установка через CocoaPods

Добавьте строку в ваш Podfile:

# Для Yams
pod 'Yams'

# Для YamlSwift
pod 'YamlSwift'

Затем выполните pod install.

3. Парсинг YAML с помощью Yams

После установки импортируйте библиотеку в файл Swift:

import Yams

Базовый парсинг строки

Допустим, у нас есть YAML-строка с информацией о пользователе:

let yamlString = """
name: Иван Петров
age: 30
languages:
  - Swift
  - Python
  - JavaScript
"""

Парсинг выполняется с помощью функции Yams.load(yaml:):

do {
    if let result = try Yams.load(yaml: yamlString) as? [String: Any] {
        print("Имя: \(result["name"] ?? "")")
        print("Возраст: \(result["age"] ?? 0)")
        if let languages = result["languages"] as? [String] {
            print("Языки: \(languages.joined(separator: ", "))")
        }
    }
} catch {
    print("Ошибка парсинга YAML: \(error.localizedDescription)")
}

Парсинг из файла

Для загрузки YAML из файла в Bundle используйте:

guard let filePath = Bundle.main.path(forResource: "config", ofType: "yaml"),
      let yamlString = try? String(contentsOfFile: filePath, encoding: .utf8) else {
    fatalError("Файл config.yaml не найден")
}

do {
    let config = try Yams.load(yaml: yamlString) as? [String: Any]
    // работа с config
} catch {
    print("Ошибка: \(error)")
}

4. Сериализация (создание YAML) с помощью Yams

Yams также позволяет конвертировать Swift-объекты обратно в YAML-строку. Используйте функцию Yams.dump(object:):

let dictionary: [String: Any] = [
    "name": "Анна Смирнова",
    "age": 25,
    "skills": ["iOS", "macOS", "watchOS"]
]

do {
    let yamlString = try Yams.dump(object: dictionary)
    print(yamlString)
} catch {
    print("Ошибка сериализации: \(error)")
}

Результат будет выглядеть так:

age: 25
name: Анна Смирнова
skills:
- iOS
- macOS
- watchOS

5. Работа с YamlSwift

YamlSwift предоставляет ещё более простой API. Импортируйте библиотеку:

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