在 Swift (iOS/macOS) 中使用 YAML
YAML(YAML Ain't Markup Language)是一种方便的数据序列化格式,广泛应用于配置文件、API 描述和数据交换。在 iOS 和 macOS 的 Swift 生态系统中,有多个可靠的库可用于解析和生成 YAML。在本文中,我们将介绍两个最流行的库:Yams 和 YamlSwift。您将学习如何将它们安装到项目中,执行基本的解析、序列化以及处理可能的错误。
1. 库概述
Yams
Yams 是一个用纯 Swift 编写的现代 YAML 处理库。它支持 YAML 1.2 规范,包含词法分析器、解析器和序列化工具。Yams 受到社区的积极维护,非常适合使用 Swift Package Manager 或 CocoaPods 的项目。
YamlSwift
YamlSwift 是一个更轻量的库,也完全用 Swift 编写。它提供了用于解析 YAML 字符串和文件的最小化 API。YamlSwift 非常适合不需要完整 YAML 功能支持的简单场景。
2. 安装
这两个库都可以通过 Swift Package Manager (SPM) 或 CocoaPods 安装。让我们看看这两种方式。
通过 Swift Package Manager 安装(推荐)
在 Xcode 中,打开 File → Add Packages 并粘贴仓库 URL:
- Yams:
https://github.com/jpsim/Yams.git - YamlSwift:
https://github.com/behrang/YamlSwift.git
选择所需的版本(建议使用最新的稳定版本)并将包添加到您的 target。
通过 CocoaPods 安装
在您的 Podfile 中添加一行:
# 对于 Yamspod 'Yams'
# 对于 YamlSwiftpod 'YamlSwift'然后执行 pod install。
3. 使用 Yams 解析 YAML
安装后,在 Swift 文件中导入库:
import Yams基本字符串解析
假设我们有一个包含用户信息的 YAML 字符串:
let yamlString = """name: 伊万·彼得罗夫age: 30languages: - Swift - Python - JavaScript"""使用 Yams.load(yaml:) 函数进行解析:
do { if let result = try Yams.load(yaml: yamlString) as? [String: Any] { print("姓名: \\(result["name"] ?? "")") print("年龄: \\(result["age"] ?? 0)") if let languages = result["languages"] as? [String] { print("语言: \\(languages.joined(separator: ", "))") } }} catch { print("YAML 解析错误: \\(error.localizedDescription)")}从文件解析
要从 Bundle 中的文件加载 YAML,请使用:
guard let filePath = Bundle.main.path(forResource: "config", ofType: "yaml"), let yamlString = try? String(contentsOfFile: filePath, encoding: .utf8) else { fatalError("未找到 config.yaml 文件")}
do { let config = try Yams.load(yaml: yamlString) as? [String: Any] // 使用 config} catch { print("错误: \\(error)")}4. 使用 Yams 进行序列化(生成 YAML)
Yams 还允许将 Swift 对象转换回 YAML 字符串。使用 Yams.dump(object:) 函数:
let dictionary: [String: Any] = [ "name": "安娜·斯米尔诺娃", "age": 25, "skills": ["iOS", "macOS", "watchOS"]]
do { let yamlString = try Yams.dump(object: dictionary) print(yamlString)} catch { print("序列化错误: \\(error)")}结果将如下所示:
age: 25name: 安娜·斯米尔诺娃skills:-