[swift-evolution] Pitch: Support for map and flatMap with smart key paths
tobias at developmunk.dk
tobias at developmunk.dk
Thu Jun 8 09:20:53 CDT 2017
I had the need for the same thing today and made it as an extension on Sequence.
extension Sequence {
func map<T>(_ keyPath: KeyPath<Element, T>) -> [T] {
return self.map {
$0[keyPath: keyPath]
}
}
func flatMap<T>(_ keyPath: KeyPath<Element, T?>) -> [T] {
return self.flatMap {
$0[keyPath: keyPath]
}
}
}
> The new smart key path feature is really lovely, and feels like a great addition to Swift.
>
> It seems like it might be straightforward to add overloads of `map` and `flatMap` to the standard library to make use of the new functionality:
>
> let managers = flatOrganisation.managers
> let allEmployees = Set(managers.flatMap(\.directReports))
> let employeeNames = Set(allEmployees.map(\.name))
>
> This feels like a really natural way of working with key paths in a functional style. It makes a lot of sense for collections, and possibly for Optional too (although as far as I can see optional chaining is more or less equivalent, and with more compact syntax).
>
> I’m hoping that this might be low-hanging fruit that could be considered for the Swift 4 release. I’d be happy to have a go at writing a proposal if there’s interest!
>
> –Adam
>
>
>
More information about the swift-evolution
mailing list