I am working on a Swift service that stores codable types in JSON. The type also defines a nested CodingKeys
enum to define the property names when coded to JSON. For example, I might have a type that looks like this:
struct MyType : Codable {
let myIntProperty: Int
let myStringProperty: String
enum CodingKeys: String, CodingKey {
case myIntProperty = "int_property"
case myStringProperty = "string_property"
}
}
Now I have a function that wants to operate on one of these properties, as specified by a key path to that property. Using the type from the example, I want a function that can be called like this:
let result = myFunc(usingProperty: \MyType.myIntProperty)
My function is declared using the KeyPath
type:
func myFunc<T: Codable, G>(usingProperty: KeyPath<T, G>) -> G {
...
}
In order to implement my function, I would like to somehow get access to not just the key path parameter named usingProperty
, but also to the coding key that it is associated with. So when called with the key path to the myIntProperty
property, I would want to get the name used when encoding it, which is int_property
.
Is there any way to derive this value from the KeyPath
parameter and its root type's CodingKeys
enumeration?