Skip to content

Instantly share code, notes, and snippets.

@d-date
Created September 3, 2018 21:16
Show Gist options
  • Save d-date/5475d1bdec354de5d8786a78c75290c2 to your computer and use it in GitHub Desktop.
Save d-date/5475d1bdec354de5d8786a78c75290c2 to your computer and use it in GitHub Desktop.
When define prop as this, we can mutate property with function composition #CodePiece #tryswiftnyc
func prop<Root, Value>(
_ kp: WritableKeyPath<Root, Value>
)
-> (@escaping (Value) -> Value)
-> (Root) -> Root {
return { transformPart in
return { root in
var root = root
root[keyPath: kp] = transformPart(root[keyPath: kp])
return root
}
}
}
user.age
let newUser = user
|> prop(\.age)(incr)
>>> (prop(\.name)) { $0.uppercased() }
newUser.age
newUser.name
[user, user, user]
|> map(prop(\.age)(incr)
>>> (prop(\.name)) { $0.uppercased() })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment