Trabajo con YAML en Swift (iOS/macOS)
YAML (YAML Ain't Markup Language) es un formato conveniente de serialización de datos, ampliamente utilizado para archivos de configuración, descripción de API e intercambio de datos. En el ecosistema Swift para iOS y macOS hay varias bibliotecas confiables disponibles que permiten analizar y generar YAML. En este artículo, veremos las dos más populares: Yams y YamlSwift. Aprenderá cómo instalarlas en su proyecto, realizar análisis básico, serialización y manejar posibles errores.
1. Resumen de las bibliotecas
Yams
Yams es una biblioteca moderna para trabajar con YAML, escrita completamente en Swift. Soporta la especificación YAML 1.2, incluye un lexer, parser y herramientas para serialización. Yams es mantenida activamente por la comunidad y es ideal para proyectos que usan Swift Package Manager o CocoaPods.
YamlSwift
YamlSwift es una biblioteca más ligera, también escrita completamente en Swift. Proporciona una API minimalista para analizar cadenas y archivos YAML. YamlSwift es perfecta para escenarios simples donde no se requiere soporte completo de todas las funcionalidades de YAML.
2. Instalación
Ambas bibliotecas se pueden instalar mediante Swift Package Manager (SPM) o CocoaPods. Veamos ambas opciones.
Instalación mediante Swift Package Manager (recomendado)
En Xcode, abra File → Add Packages e inserte la URL del repositorio:
- Yams:
https://github.com/jpsim/Yams.git - YamlSwift:
https://github.com/behrang/YamlSwift.git
Seleccione la versión deseada (se recomienda la última estable) y agregue el paquete a su target.
Instalación mediante CocoaPods
Agregue la línea a su Podfile:
# Para Yamspod 'Yams'
# Para YamlSwiftpod 'YamlSwift'Luego ejecute pod install.
3. Análisis de YAML con Yams
Después de la instalación, importe la biblioteca en el archivo Swift:
import YamsAnálisis básico de una cadena
Supongamos que tenemos una cadena YAML con información de un usuario:
let yamlString = """name: Iván Petrovage: 30languages: - Swift - Python - JavaScript"""El análisis se realiza con la función Yams.load(yaml:):
do { if let result = try Yams.load(yaml: yamlString) as? [String: Any] { print("Nombre: \\(result["name"] ?? "")") print("Edad: \\(result["age"] ?? 0)") if let languages = result["languages"] as? [String] { print("Idiomas: \\(languages.joined(separator: ", "))") } }} catch { print("Error al analizar YAML: \\(error.localizedDescription)")}Análisis desde un archivo
Para cargar YAML desde un archivo en el Bundle, use:
guard let filePath = Bundle.main.path(forResource: "config", ofType: "yaml"), let yamlString = try? String(contentsOfFile: filePath, encoding: .utf8) else { fatalError("Archivo config.yaml no encontrado")}
do { let config = try Yams.load(yaml: yamlString) as? [String: Any] // trabajar con config} catch { print("Error: \\(error)")}4. Serialización (creación de YAML) con Yams
Yams también permite convertir objetos Swift de vuelta a una cadena YAML. Use la función Yams.dump(object:):
let dictionary: [String: Any] = [ "name": "Ana Smirnova", "age": 25, "skills": ["iOS", "macOS", "watchOS"]]
do { let yamlString = try Yams.dump(object: dictionary) print(yamlString)} catch { print("Error de serialización: \\(error)")}El resultado se verá así:
age: 25name: Ana Smirnovaskills:- También en la biblioteca
Viper para Go: guía completa con ejemplos
Quartz Scheduler Java: guía completa con ejemplos prácticos
Contenedor de Inyección de Dependencias Swift: Swinject para iOS/macOS