Trabalhando com YAML em Swift (iOS/macOS)
YAML (YAML Ain't Markup Language) é um formato conveniente de serialização de dados, amplamente utilizado para arquivos de configuração, descrição de API e troca de dados. No ecossistema Swift para iOS e macOS, existem várias bibliotecas confiáveis que permitem analisar e gerar YAML. Neste artigo, veremos as duas mais populares: Yams e YamlSwift. Você aprenderá como instalá-las no seu projeto, realizar parsing básico, serialização e lidar com possíveis erros.
1. Visão geral das bibliotecas
Yams
Yams é uma biblioteca moderna para trabalhar com YAML, escrita inteiramente em Swift. Ela suporta a especificação YAML 1.2, incluindo um lexer, parser e ferramentas de serialização. Yams é ativamente mantida pela comunidade e é ideal para projetos que usam Swift Package Manager ou CocoaPods.
YamlSwift
YamlSwift é uma biblioteca mais leve, também escrita inteiramente em Swift. Ela fornece uma API minimalista para analisar strings e arquivos YAML. YamlSwift é perfeita para cenários simples, onde não é necessário suporte completo a todos os recursos do YAML.
2. Instalação
Ambas as bibliotecas podem ser instaladas via Swift Package Manager (SPM) ou CocoaPods. Vejamos ambas as opções.
Instalação via Swift Package Manager (recomendado)
No Xcode, abra File → Add Packages e insira a URL do repositório:
- Yams:
https://github.com/jpsim/Yams.git - YamlSwift:
https://github.com/behrang/YamlSwift.git
Selecione a versão desejada (recomenda-se a última estável) e adicione o pacote ao seu target.
Instalação via CocoaPods
Adicione a linha ao seu Podfile:
# Para Yamspod 'Yams'
# Para YamlSwiftpod 'YamlSwift'Em seguida, execute pod install.
3. Parsing de YAML com Yams
Após a instalação, importe a biblioteca no arquivo Swift:
import YamsParsing básico de string
Suponha que temos uma string YAML com informações do usuário:
let yamlString = """name: João Silvaage: 30languages: - Swift - Python - JavaScript"""O parsing é feito com a função Yams.load(yaml:):
do { if let result = try Yams.load(yaml: yamlString) as? [String: Any] { print("Nome: \\(result["name"] ?? "")") print("Idade: \\(result["age"] ?? 0)") if let languages = result["languages"] as? [String] { print("Idiomas: \\(languages.joined(separator: ", "))") } }} catch { print("Erro ao fazer parsing do YAML: \\(error.localizedDescription)")}Parsing a partir de arquivo
Para carregar YAML de um arquivo no Bundle, use:
guard let filePath = Bundle.main.path(forResource: "config", ofType: "yaml"), let yamlString = try? String(contentsOfFile: filePath, encoding: .utf8) else { fatalError("Arquivo config.yaml não encontrado")}
do { let config = try Yams.load(yaml: yamlString) as? [String: Any] // trabalhar com config} catch { print("Erro: \\(error)")}4. Serialização (criação de YAML) com Yams
Yams também permite converter objetos Swift de volta para uma string YAML. Use a função Yams.dump(object:):
let dictionary: [String: Any] = [ "name": "Ana Silva", "age": 25, "skills": ["iOS", "macOS", "watchOS"]]
do { let yamlString = try Yams.dump(object: dictionary) print(yamlString)} catch { print("Erro de serialização: \\(error)")}O resultado será algo como:
age: 25name: Ana Silvaskills:- Também na biblioteca
Processamento de Markdown em Swift para iOS e macOS: bibliotecas e exemplos
Autorização e Autenticação em C# (.NET): Guia Completo
Sinon para JavaScript (Node.js): guia completo com exemplos práticos
Criptografia em TypeScript: criptografia e hashes na prática