DynamicCodable

Test Status

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 是一个枚举,表示自身可编码的各种原始类型。使用它非常简单 — 只需将您的图的某一部分标记为 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 中。需要线性历史记录。