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

Reply via email to