Работа с 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
- В Xcode выберите File → Add Packages.
- Вставьте URL репозитория:
https://github.com/jpsim/Yams.git - Выберите версию (рекомендуется последняя стабильная) и нажмите 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 = Также в библиотеке
Парсинг HTML в TypeScript: библиотеки, инструменты и примеры
Стандартная библиотека TypeScript: полный обзор для разработчиков
Миграции баз данных в Swift: инструменты и подходы для iOS/macOS
candle для Rust: полное руководство с примерами