Swift:
Working with YAML

How to:

Swift does not include built-in support for YAML parsing and serialization, necessitating the use of third-party libraries. A popular choice is Yams, a library for working with YAML in Swift.

First, you need to add Yams to your project. If you’re using Swift Package Manager, you can add it as a dependency in your Package.swift file:

dependencies: [
    .package(url: "https://github.com/jpsim/Yams.git", from: "4.0.0")
]

Parsing YAML into Swift

Assume you have the following YAML configuration for a simple app:

name: MyApp
version: 1.0
environment: development
features:
  - login
  - notifications

Here’s how you can parse this YAML string in Swift using Yams:

import Yams

let yamlString = """
name: MyApp
version: 1.0
environment: development
features:
  - login
  - notifications
"""

do {
    if let data = try Yams.load(yaml: yamlString) as? [String: Any] {
        print(data)
        // Example access to the parsed data
        if let name = data["name"] as? String {
            print("App Name: \(name)")
        }
    }
} catch {
    print("Error parsing YAML: \(error)")
}

Sample output:

["name": MyApp, "version": 1.0, "environment": "development", "features": ["login", "notifications"]]
App Name: MyApp

Serializing Swift Objects to YAML

Converting a Swift object back to a YAML string is also straightforward with Yams. Suppose you have the same data structure that needs to be serialized:

let appInfo = [
    "name": "MyApp",
    "version": 1.0,
    "environment": "development",
    "features": ["login", "notifications"]
] as [String : Any]

do {
    let yamlString = try Yams.dump(object: appInfo)
    print(yamlString)
} catch {
    print("Error serializing to YAML: \(error)")
}

This will produce a YAML-formatted String:

environment: development
features:
  - login
  - notifications
name: MyApp
version: 1.0

These examples demonstrate basic operations for working with YAML in Swift applications. Remember, while YAML excels in human readability and ease of use, always consider the specific needs of your application, especially regarding performance and complexity, when choosing your data serialization format.