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 > > > _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution