在 Swift 中使用 YAML:适用于 iOS/macOS 的 Yams 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Swift (iOS/macOS) 中使用 YAML:Yams 库



YAML (YAML Ain't Markup Language) 是一种方便的数据序列化格式,常用于配置文件、依赖描述(例如 docker-compose.yml),以及需要可读且简洁数据结构的项目。在 Apple 生态系统中,有多个库可用于在 Swift 中处理 YAML,但最流行且最稳定的是 Yams——一个用纯 Swift 编写、快速且易于使用的库。



什么是 Yams?



Yams 是一个开源库,提供对 Swift 中 YAML 解析和序列化的完整支持。它与 iOS、macOS、tvOS 和 watchOS 兼容。Yams 支持 YAML 1.2 规范,并允许将 YAML 字符串转换为 Swift 结构(字典、数组、字符串、数字、布尔值),反之亦然。



Yams 的主要功能:

  • 将 YAML 字符串解析为 Any(通常是 [String: Any] 或 [Any])。
  • 将 Swift 对象序列化回 YAML。
  • 支持嵌套结构、数组、多文档。
  • 错误处理并提供详细消息。
  • 完全兼容 Swift Package Manager (SPM) 和 CocoaPods。


在项目中安装 Yams



您可以通过 Swift Package Manager(推荐)或 CocoaPods 安装 Yams。



通过 Swift Package Manager



  1. 在 Xcode 中选择 File → Add Packages。
  2. 粘贴仓库 URL:https://github.com/jpsim/Yams.git
  3. 选择版本(推荐最新稳定版)并点击 Add Package。


或者,在 Package.swift 中添加依赖:



// swift-tools-version:5.7import 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: Swifttype: languageversions: - 5.5 - 5.6 - 5.7features: 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: SwiftVersions: [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: MyAppfeatures:  - dark_mode  - notificationssettings:  autosave: true  timeout: 30                    

推荐