[swift-evolution] [Pitch] KeyPath based map, flatMap, filter

Dave Abrahams dabrahams at apple.com
Wed Jul 5 16:13:23 CDT 2017

on Wed Jul 05 2017, Benjamin Herzog <swift-evolution at swift.org> wrote:

> Hey guys,
> I would like to pitch a small convenient change to the Swift stdlib.
> With KeyPaths added in SE-0161 I would like to add some convenience
> calls to map, flatMap and filter in Sequences. To extract properties of
> an array of objects we currently use trailing closure syntax together
> with the shorthand $0 for the first closure argument. This is still kind
> of verbose and also hard to read in some situations.I think it is much better to understand what is
> going on when using the
> type safe KeyPaths for that. I already implemented a working solution
> and would like to pitch the idea here to get some feedback before
> opening the swift evolution proposal.I propose using 
> persons.flatMap(keyPath: \.name)
> over
> persons.flatMap { $0.name }
> Link to pull request: https://github.com/apple/swift/pull/10760

Repeating my earlier response to this idea:

I am not convinced this syntactic sugar is worth complicating the
language or library for, but if it is, IMO the right thing is to make a
keypath be-a subtype of the appropriate function type, rather than to
start down the path of creating a keypath overload for every method that
takes a closure argument.


More information about the swift-evolution mailing list