Introduction to Swift Keypaths

WritableKeyPath

WritableKeyPath<Root, Value>

In the earlier example, our type was a WritableKeyPath. WritableKeyPaths are, as the name implies, keypaths that allow you to write information. They're formed for var properties on var instances.

struct MutableUser {
  var username: String
}
var firstUser = MutableUser(username: "Shinji")

firstUser[keyPath: \MutableUser.username] = "Ikari"

If you want to have a keypath argument to a function that allows mutating the contents, WritableKeyPath is a good choice:

func modify(user: User, keyPath: WritableKeyPath<User, String>) {
  user[keyPath: keyPath] = "Hello World"
}

There's another variant of the WritableKeyPath, which we will introduce next.