<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">It could be used in that kind of way too (illustrating with the ‘#' syntax suggestion):<div class=""><br class=""></div><div class="">class Foo {</div><div class="">&nbsp; &nbsp; var name: String</div><div class="">}</div><div class=""><br class=""></div><div class="">let getter = Foo.name#get // (Foo) -&gt; () -&gt; (String)</div><div class="">let setter = Foo.name#set // (Foo) -&gt; (String) -&gt; ()</div><div class=""><br class=""></div><div class="">let foo = Foo(name: "f")</div><div class="">getter(foo)() // "f"</div><div class="">setter(foo)("g") // now foo.name == "g"</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">It might be the similar with struct:</div><div class=""><br class=""></div><div class=""><div class="">struct Bar {</div><div class="">&nbsp; &nbsp; var name: String</div><div class="">}</div><div class=""><br class=""></div><div class="">let getter = Bar.name#get // (Bar) -&gt; () -&gt; (String)</div><div class="">let setter = Bar.name#set // (inout Bar) -&gt; (String) -&gt; ()</div></div><div class=""><br class=""></div><div class=""><div class="">var bar = Bar(name: "f") // note bar is a var</div><div class="">getter(bar)() // "f"</div><div class="">setter(&amp;bar)("g") // now foo.name == "g"</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class="">
<div class="">Pierre</div>

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">Le 17 déc. 2015 à 03:59, Joe Groff via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; a écrit :</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">This is something I'm looking into. Providing the getter is valuable, but setters are not usually very useful by themselves. With value types, you need the full property interface to be able to drill further down into the value and update part of the value, since you potentially need recursive writeback. Furthermore, the get/set protocol is inefficient for copy-on-write types, since it forces a temporary copy when doing partial updates; Swift's property model provides a third implicit "materializeForSet" accessor that preserves in-place update when going through abstractions such as overrideable class properties, properties in generics, or properties across resilience boundaries. There are even more shenanigans we're planning to make mutations through array slices and the like efficient too. To that end, I think the two things you want of a property are:</span><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">- its getter, since read-only access is definitely useful for things like `map`, and</div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">- what i'll call its "lens", notionally a function T -&gt; inout U, which captures the full property interface. You can apply the function in mutable contexts without sacrificing efficiency or composability, and derive the getter/setter functions fairly straightforwardly.</div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">-Joe</div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div class=""><blockquote type="cite" class=""><div class="">On Dec 13, 2015, at 4:34 PM, Michael Henson via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Swift-like full KVO/KVC as in Objective-C is a stated long-term goal for Swift's evolution. The 90% solution might be more straightforward:<br class=""><br class="">class Example {<div class="">&nbsp; var member: String</div><div class=""><br class=""></div><div class="">&nbsp; func print() {</div><div class="">&nbsp; &nbsp; print(self.member)</div><div class="">&nbsp; }</div><div class="">}<br class=""><br class="">var example = Example(member: "Hi!")<br class=""><br class="">var example_print_method = example.print</div><div class="">example_print_method()</div><div class="">result:</div><div class="">Hi!<br class=""><br class=""></div><div class="">If there were a mechanism for referring to the getter and setter methods on the var member property as the same kind of self-capturing closures, it could make simple cases of data binding easier to implement:<br class=""><br class="">var serializeFields = [<br class="">&nbsp; "member": example.member#get,<br class="">]<br class=""><br class="">var deserializeFields = [</div><div class="">&nbsp; "member": example.member#set,</div><div class="">]<br class=""><br class="">var broadcastValueTo = [</div><div class="">&nbsp; "memberValues": [</div><div class="">&nbsp; &nbsp; &nbsp;example.member#set,</div><div class="">&nbsp; &nbsp; &nbsp;example2.member#set,</div><div class="">&nbsp; &nbsp; &nbsp;example3.member#set,</div><div class="">&nbsp; ]</div><div class="">]</div><div class=""><br class=""></div><div class="">viewController.textField.onValueChanged(example.member#set)<br class=""><br class="">Etc.<br class=""><br class="">The "#" notation is just a placeholder for "whatever mechanism is decided upon", though it does seem to be available and using it postfix makes a first-glance sense to me in terms of the semantics of expressions.<br class=""><br class="">Mike</div></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=RoDF4MveSEMYBIqIJA6ub1g8cOZ-2BVYvqV-2FqygPhjPn9K6-2B-2BOoX8WSqEt2FYNfGr-2Bo0FgLPaSF7hDgINEU71hRVCsib-2B9zXQL4WH71BGc5tKxvQo19hMI2AbNCeUXVCFyXV1i4OBUzt1th3tmC8E1El8-2BWVW4gsK5GxIoQ-2BAkHS0s471KGj-2FbEtVpB8q5NGaTc0sVRTjTSqBqQvRgjMom4A-3D-3D" alt="" width="1" height="1" border="0" class="" style="height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;"><span class="Apple-converted-space">&nbsp;</span>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class=""></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=ST9LHNQ2kYRKURQJ7G-2FmGCudH8brFLVBGfh-2Becw1t9g2PuY1bfVi5hlZvSsqAUdg4nS-2BXzcupsJ0uVBTiDRJ-2B9l-2BjLp-2FFYoOJhkya23nL8J-2BwZQ2HTOLPwd8FAzb-2BVyHdfVul6rF1Aw-2B9wbp5IMPibNd6lety-2Fv6-2BMomse1oZicZ5APeg0kLyaJ0QYFz-2BPHr5cU0dHj4uiojJJ-2Bv6sro6FOYXsweqc-2BUffaAM2EyuHA-3D" alt="" width="1" height="1" border="0" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""><span class="Apple-converted-space">&nbsp;</span>_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">swift-evolution mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:swift-evolution@swift.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">swift-evolution@swift.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div><br class=""></div></body></html>