<div dir="ltr">Key-Paths do support operators and custom functions. How should this work within the context of this proposal?</div><div class="gmail_extra"><br><div class="gmail_quote">2016-04-12 11:14 GMT+02:00 Brent Royal-Gordon via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">&gt; I very much like this proposal but what bothers me is this doubling of valueForKeyPath(#keyPath(xxx) in the signature of the function.<br>
&gt;<br>
&gt; chris.valueForKeyPath(#keyPath(Person.bestFriend.lastName)) // =&gt; Groff<br>
&gt;<br>
&gt; chris<br>
&gt; .valueForKeyPath(#keyPath(Person.friends.firstName)) // =&gt; [&quot;Joe&quot;, &quot;Douglas&quot;]<br>
&gt;<br>
&gt; I’m not sure whether the form below is actually possible. For me it reads more naturally and is more consistent with “Modern Swift” as far as I know.<br>
&gt;<br>
&gt; chris.valueFor(#keyPath(Person.friends.firstName)) // =&gt; [&quot;Joe&quot;, &quot;Douglas”]<br>
&gt; or maybe<br>
&gt; chris.valueOf(#keyPath(Person.friends.firstName)) // =&gt; [&quot;Joe&quot;, &quot;Douglas”]<br>
<br>
</span>Interesting.<br>
<br>
If Foundation, Core Data, AppKit, and other frameworks properly annotated their APIs, I think we could actually get this from the already accepted SE-0033 &quot;Import Objective-C Constants as Swift Types&quot; &lt;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0033-import-objc-constants.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0033-import-objc-constants.md</a>&gt;. Specifically, Foundation would have to include this typedef:<br>
<br>
        typedef NSString * NSKeyPath __attribute__((swift_wrapper(struct)));<br>
<br>
And all APIs with string types which were actually key paths would have to be modified to use it. Then `-(nullable id)valueForKeyPath:(NSKeyPath)keyPath` would import as `func value(for: NSKeyPath) -&gt; AnyObject?`. This proposal&#39;s `#keyPath` construct would have to then construct an `NSKeyPath` instead of a `String`.<br>
<br>
(To make this all work, it might make sense to add a KeyPathLiteralConvertible protocol to the standard library. As a bonus, if this protocol&#39;s initializer received enough metadata, it might be able to construct alternate forms of key paths, such as the Rails-style ones which handle arrays somewhat differently from Foundation&#39;s.)<br>
<br>
This is more work, but it&#39;s also more general, which is a pretty cool prospect!<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><font face="arial, helvetica, sans-serif" style="font-size:12.8000001907349px">Mit freundlichen Grüßen</font><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif"><br></font></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif"><b>Christian Kienle</b></font></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif">Mobile Developer</font></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif"><br></font></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif"><b>REWE Digital GmbH</b></font></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif">Domstraße 20, 50668 Köln, Büro: Schanzenstr. 6-20, 51063 Köln</font></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif">Geschäftsführer: Dr. Jean-Jacques Michel van Oosten (Vorsitzender), Christoph Eltze, Dr. Johannes Steegmann, Dr. Robert Zores</font></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif">Handelsregister: Amtsgericht Köln (HRB 78670) UST-ID-Nr.: DE 290 605 450</font></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif" style="font-size:12.8000001907349px">Telefon: +49 </font><font face="arial, helvetica, sans-serif">151 11441782</font></div><div style="font-size:12.8000001907349px"><span style="font-family:arial,helvetica,sans-serif;font-size:12.8000001907349px">E-Mail: </span><a href="mailto:christian.kienle@rewe-digital.com" style="font-family:arial,helvetica,sans-serif;font-size:12.8000001907349px;color:rgb(17,85,204)" target="_blank">christian.kienle@rewe-digital.com</a><br></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif">Internet: <u><a href="http://www.rewe-digital.com/" style="color:rgb(17,85,204)" target="_blank">www.rewe-digital.com</a></u></font></div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif">Ein Unternehmen der <b>REWE GROUP</b></font></div><div style="font-size:12.8000001907349px"><font face="arial, helvetica, sans-serif"><a href="http://www.rewe-group.com/" style="color:rgb(17,85,204)" target="_blank">http://www.rewe-group.com</a></font></div></div></div>
</div>