Работа с YAML в Swift: библиотека Yams для iOS/macOS

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

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

Начать курс

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

YAML (YAML Ain't Markup Language) — это удобный формат сериализации данных, который часто используется для конфигурационных файлов, описания зависимостей (например, docker-compose.yml), а также в проектах, где требуется читаемая и лаконичная структура данных. В экосистеме Apple для работы с YAML на Swift существует несколько библиотек, но наиболее популярной и стабильной является Yams — быстрая и простая в использовании библиотека, написанная на чистом Swift.

Что такое Yams?

Yams — это библиотека с открытым исходным кодом, которая предоставляет полную поддержку парсинга и сериализации YAML в Swift. Она совместима с iOS, macOS, tvOS и watchOS. Yams поддерживает спецификацию YAML 1.2 и позволяет конвертировать YAML-строки в структуры Swift (словари, массивы, строки, числа, булевы значения) и обратно.

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

  • Парсинг YAML-строки в Any (обычно [String: Any] или [Any]).
  • Сериализация Swift-объектов обратно в YAML.
  • Поддержка вложенных структур, массивов, множественных документов.
  • Обработка ошибок с подробными сообщениями.
  • Полностью совместима с Swift Package Manager (SPM) и CocoaPods.

Установка Yams в проект

Вы можете установить Yams через Swift Package Manager (рекомендуется) или CocoaPods.

Через Swift Package Manager

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

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

// swift-tools-version:5.7
import PackageDescription

let package = Package(
    name: "MyProject",
    dependencies: [
        .package(url: "https://github.com/jpsim/Yams.git", from: "5.0.0")
    ],
    targets: [
        .target(
            name: "MyProject",
            dependencies: ["Yams"])
    ]
)

Через CocoaPods

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

pod 'Yams', '~> 5.0'

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

Базовое использование: парсинг YAML

После установки импортируйте библиотеку и используйте Yams.load(yaml:) для разбора строки.

import Yams

let yamlString = """
name: Swift
type: language
versions:
  - 5.5
  - 5.6
  - 5.7
features:
  protocol_oriented: true
  value_semantics: true
"""

do {
    if let data = try Yams.load(yaml: yamlString) as? [String: Any] {
        print("Name: \(data["name"] ?? "")")
        print("Versions: \(data["versions"] ?? [])")
        if let features = data["features"] as? [String: Bool] {
            print("Protocol oriented: \(features["protocol_oriented"] ?? false)")
        }
    }
} catch {
    print("Ошибка парсинга YAML: \(error.localizedDescription)")
}

Результат выполнения:

Name: Swift
Versions: [5.5, 5.6, 5.7]
Protocol oriented: true

Сериализация Swift-объектов в YAML

Для обратного преобразования используйте Yams.dump(object:):

import Yams

let dictionary: [String: Any] = [
    "app": "MyApp",
    "version": 2.0,
    "features": ["dark_mode", "notifications"],
    "settings": [
        "autosave": true,
        "timeout": 30
    ]
]

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

Вывод:

app: MyApp
features:
  - dark_mode
  - notifications
settings:
  autosave: true
  timeout: 30
version: 2.0

Работа с несколькими документами YAML

YAML поддерживает множественные документы в одном файле (разделяются ---). Yams позволяет обрабатывать их с помощью Yams.loadMultiple(yaml:):

import Yams

let multiDoc =                    

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