AnyCodingKey
A CodingKey for any encoding or decoding container.
Overview
AnyCodingKey provides a wrapper for a String (and optionally an Int), and conforms to CodingKey. It
allows easy creation of arbitrary keys for KeyedDecodingContainer and KeyedEncodingContainer, or for use
in coding paths. AnyCodingKey conforms to ExpressibleByStringLiteral and ExpressibleByIntegerLiteral
to make use particularly easy.
Common Use Cases
Avoiding manual CodingKey enums
struct Pokemon: Decodable {
let number, name, species: String
let types: [String]
init(from decoder: Decoder) throws {
// Create a KeyedDecodingContainer keyed by AnyCodingKey.
let c = try decoder.anyKeyedContainer()
// Use String literals to create AnyCodingKeys
number = try c.decode(String.self, forKey: "number")
name = try c.decode(String.self, forKey: "name")
species = try c.decode(String.self, forKey: "species")
types = try c.decode([String].self, forKey: "types")
}
}
Adding AnyCodingKey as a Dependency
To use the AnyCodingKey library in a SwiftPM project, add the following line to the dependencies in your Package.swift file:
.package(url: "https://github.com/RNCodable/AnyCodingKey", from: "1.0.0"),
Include "AnyCodingKey" as a dependency for your executable target:
.target(name: "<target>", dependencies: [
.product(name: "AnyCodingKey"),
]),
Finally, add import AnyCodingKey to your source code.