struct Person {
var name: String
var age: Int
}
// *** before: ***
// #keyPath worked only for Objective-C types, and gave a string;
// for a Swift struct there was only a closure
let names = people.map { $0.name }
// *** in version 4.0: ***
let nameKey = \Person.name // WritableKeyPath<Person, String>
var alina = Person(name: "Alina", age: 25)
print(alina[keyPath: nameKey]) // reading
alina[keyPath: \Person.age] = 26 // and writing
// the path is a value: it can be stored, passed and chosen at run time
let keys: [PartialKeyPath<Person>] = [\Person.name, \Person.age]
for key in keys { print(alina[keyPath: key]) }
let names = people.map { $0[keyPath: nameKey] }