DynamicCodable
旨在使在解档时轻松保留任意 Codable
数据结构,从而允许您在解码完成后以类型安全的方式检查这些结构。
将 DynamicCodable
作为依赖项添加到您的 Package.swift
文件中即可开始使用。然后,将 import DynamicCodable
添加到您希望使用该库的任何文件中。
请查看发布以获取推荐版本。
dependencies: [
.package(url: "https://github.com/mochidev/DynamicCodable.git", .upToNextMinor(from: "1.0.0")),
],
...
targets: [
.target(
name: "MyPackage",
dependencies: [
"DynamicCodable",
]
)
]
DynamicCodable
是一个枚举,表示自身可编码的各种原始类型。使用它非常简单 — 只需将您的图的某一部分标记为 DynamicCodable
类型,即可在解码期间保留该子树
struct ServerResponse: Codable {
let status: String
let metadata: DynamicCodable
}
let response = try JSONDecoder().decode(ServerResponse.self, from: data)
// Consume the metadata whole
print(response.metadata)
// Dig into the metadata — it's just an enum!
switch response.metadata {
case .keyed(let dictionary)
print(dictionary["debugInfo"], default: .empty) // Convenience for dictionary[.string("debugInfo"), default: .empty]
case .bool(false):
print("Metadata disabled")
case .nil:
print("Metadata unavailable")
default: break
}
请注意,DynamicCodable
不仅限于与 JSON 编码器一起使用 - 它也可以与任何 Codable
兼容的编码器一起使用!
欢迎贡献!请查看已有的问题,或发起新问题来讨论新功能。虽然无法保证功能请求,但与项目目标相符且事先讨论过的 PR 非常受欢迎!
请确保所有提交都具有清晰的提交历史记录、完善的文档和全面的测试。请在提交之前 rebase 您的 PR,而不是合并到 main
中。需要线性历史记录。