On Wed, Apr 5, 2017 at 9:21 PM, Ricardo Parada via swift-evolution < [email protected]> wrote:
> > On Apr 5, 2017, at 9:41 PM, Brent Royal-Gordon via swift-evolution < > [email protected]> wrote: > > It's worth noting that, if you write `\Person.name.valueType`, this syntax > is ambiguous—it could mean "make a key path for the `valueType` property on > `name` property of `Person`", or it could mean "make a key path for the > `name` property of `Person`, then access the key path's `valueType` > property". We can solve this by always interpreting it as the former and > requiring parentheses for the latter—that is, > `(\Person.name).valueType`—but I thought it was worth calling out > explicitly. > > > Good point. > > I'm thinking about the hypothetical code examples from previous emails: > > let isPuppyQualifier = \Pet.type == .dog && \Pet.age < 12 > let familyQualifier = (\Family.pets).contains(where: isPuppyQualifier) > let familiesWithPuppies = Family.fetch(editingContext, familyQualifier) > > That's an interesting point. While `\` alone seems acceptable, I think it's unfortunate that we'll have `(\...)` and `\(...)` both in the language. Can we maybe consider instead: let firstFriendsNameKeyPath = \Person.friends[0].name\ It is also worth mentioning that, with the sigil, the `keyPath` label may not be so necessary: print(luke[\.friends[0].name]) // or, if the suggestion above is accepted print(luke[\.friends[0].name\])
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
