I agree that they can get mixed up with static properties. However, I think I 
would not mind because it would only cause an ambiguity when having a static 
property with the same name as the property which would be an odd practice I 
think.  

I was defining static properties with the same name as the property in order to 
smart key paths.  For example:

Class Person {
     static firstName: KeyPath<String>(“firstName”)
     static lastName: KeyPath<String>(“lastName”)

     var firstName: String 
     var lastName: String

     …
}


So that I could create qualifiers, ie. Person.firstName.like(“R*”), and sort 
orderings, Person.firstName.asc().

I think with these smart key paths the need for these static properties that 
mirror the property on the instance would not be required.




> On Mar 17, 2017, at 2:27 PM, Vladimir.S via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> On 17.03.2017 20:04, Michael LeHew via swift-evolution wrote:
>> Hi friendly swift-evolution folks,
>> 
>> The Foundation and Swift team  would like for you to consider the following
>> proposal:
>> 
>> Many thanks,
>> -Michael
>> 
>> 
>>  Smart KeyPaths: Better Key-Value Coding for Swift
>> ...
> 
> Just my 2 cents. FWIW, I feel like the proposed syntax is VERY confusing.
> 
> Person.friends[0].name - like access to static property. T.method can't have 
> subscript for it and then some field. So, I believe such key paths deserve 
> its own syntax.
> 
> luke[path] - very close to access the subscript of instance. In compare to 
> T.method, we can call result of T.method(i.e. let m = T.method; m()), just 
> like the T.method itself(foo.method()). But here we are calling some kind of 
> subscript instead of access property by "path".
> 
> There is no some 'special' marker for me that saying "hey, there is 
> references to properties used" from the first look.
> 
> Probably we can consider another separators, like
> 
> Person:friends[0].name
> luke:path
> 
> Person->friends[0].name
> luke->path
> 
> Person[friends[0].name] // single brackets for type
> luke[[path]] // double brackets for instance
> 
> Person@friends[0].name
> luke@path
> 
> or other with help of community.
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to