3. KeyPaths conform to Hashable
We did not see an example of this yet, but it is one of my all-time favorite keypaths functions. Every KeyPath
type is Hashable
which means that it can be used as a key in a dictionary. One use case for this is storing meta information about properties in a dictionary. Here, we have a dictionary that maps from partial key paths to String
. It stores two different keypaths (username
, age
) and their titles:
let meta: [PartialKeyPath<User>: String] = [
\User.username: \"Your Username\",
\User.age: \"Your Age\"
]
We can now write a function renderTitle
that will retrieve this meta information and print it out alongside the actual value:
func renderTitle(on: User, keyPath: AnyKeyPath) {
if let title = meta[keyPath] {
print(title, terminator: \": \")
}
print(on[keyPath: keyPath])
}
let myUser = User(username: \"Jon\", age: 44)
renderTitle(on: myUser, keyPath: \User.age)
This would print Your Age: 44
This pattern can be used for many more situations. Whenever you have information about a type, you can utilize it to store the information. Another example would be input validation.