<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=""><div class="">C# still hasn’t gotten named subscripts or tuples. It is not the place to go to look for what Swift should be. It’s just the only place I’ve had access to set-only properties, and because much of what I was doing was feeding data to GPUs, set-only properties made a lot of sense, frequently.</div><div class=""><br class=""></div><div class="">The most important thing is to not consider setting “writing”, or getting “reading”. Properties and subscripts are specifically “get” and “set”, and don’t enforce reading or writing any state. The book even gets the terminology wrong, as “read-only” instead of “get-only": <a href="https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID259" class="">https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID259</a></div><div class=""><br class=""></div><div class="">I understand that there is a lot of history in thinking about getters and setters as having something to do with storage, but that we have the keywords “get” and “set”, and not “read” and “write”, is guidance for cleaner APIs.</div><div class=""><br class=""></div><div class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 3, 2016, at 4:34 PM, Félix Cloutier &lt;<a href="mailto:felixcca@yahoo.ca" class="">felixcca@yahoo.ca</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">I would find a list of actual C# set-only properties more relevant. It wouldn't make sense for a lot of these "set-only properties" in there to offer only a setter if they were made into properties.</div><div class=""><br class=""></div><div class="">In general, I consider properties to be the observable state of an object. When I write something to a property, I expect to be able to get it back. When I pass something as a method parameter, I don't expect that I'll be able to get it back later.</div><div class="">
<br class="Apple-interchange-newline"><span style="font-family: 'Lucida Grande'; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Félix</span>
</div>

<br class=""><div class=""><blockquote type="cite" class=""><div class="">Le 3 févr. 2016 à 16:02:41, Jessy Catterwaul 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=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">I do not agree about the implication. A property can be gotten, set, or both, in at least C#, where I used a ton of set-only properties.</div><div class=""><br class=""></div><div class="">Here is a large list of properties that are set-only:</div><div class=""><a href="https://developer.apple.com/library/ios/documentation/Metal/Reference/MTLRenderCommandEncoder_Ref/index.html#//apple_ref/swift/intf/c:objc(pl)MTLRenderCommandEncoder" class="">https://developer.apple.com/library/ios/documentation/Metal/Reference/MTLRenderCommandEncoder_Ref/index.html#//apple_ref/swift/intf/c:objc(pl)MTLRenderCommandEncoder</a></div><div class=""><br class=""></div><div class="">Some of them require more than a single value, for setting. Tuple assignment or named subscripts are the best way I currently know to handle that. Having them be functions that begin with “set” and take arguments feels archaic and not specific enough, to me.</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">func</span> setStencilFrontReferenceValue(frontReferenceValue: <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">UInt32</span>,</div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal;" class="">&nbsp;&nbsp; backReferenceValue: <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">UInt32</span></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal;" class="">)</div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal; color: rgb(49, 89, 93);" class="">setStencilFrontReferenceValue<span style="" class="">(</span><span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span><span style="" class="">, backReferenceValue: </span><span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">1</span><span style="" class="">)</span></div></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; min-height: 16px;" class="">versus</div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal; min-height: 16px;" class=""><br class=""></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">var</span> stencilReferenceValues: (front: <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">UInt32</span>, back: <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">UInt32</span>) {set}</div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal; color: rgb(79, 129, 135);" class="">stencilReferenceValues<span style="" class=""> = (front: </span><span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span><span style="" class="">, back: </span><span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">1</span><span style="" class="">)</span></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal; min-height: 16px;" class=""><br class=""></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal; min-height: 16px;" class=""><br class=""></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">func</span> setVertexSamplerState(sampler: <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">MTLSamplerState</span>?, atIndex index: <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">Int</span>)</div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal; min-height: 16px;" class=""><div style="margin: 0px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #31595d" class="">setVertexSamplerState</span>(someState, atIndex <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span>)</div></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal; min-height: 16px;" class=""><br class=""></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal; min-height: 16px;" class=""><span style="font-family: Helvetica; font-size: 12px;" class="">versus</span></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal; min-height: 16px;" class=""><br class=""></div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">subscript</span> vertexSamplerState(index: Int): MTLSamplerState? {set}</div><div style="font-family: Menlo; font-size: 14px; margin: 0px; line-height: normal;" class="">vertexSamplerState[<span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">0</span>] = someState</div><div style="font-family: Menlo; font-size: 14px;" class=""><br class=""></div></div></div></div><div class=""><br class=""></div><div class="">The former options, I feel are not Swift, but C masquerading as Swift.</div><div class=""><br class=""></div><div class=""><br class=""></div>
&gt; Cc:swift-<a href="mailto:evolution@swift.org" class="">evolution@swift.org</a><br class="">&gt; Subject:[swift-evolution] Support for pure setters<br class="">&gt; Date:February 3, 2016 at 3:31:16 PM EST<br class="">&gt; <br class="">&gt; <br class="">&gt; <br class="">&gt; &gt; On Feb 3, 2016, at 12:21 PM, Jessy Catterwaul&lt;<a href="mailto:mr.jessy@gmail.com" class="">mr.jessy@gmail.com</a>&gt;wrote:<br class="">&gt; &gt; <br class="">&gt; &gt; Joe, to attempt to set foo.x doesn’t make sense. If foo cannot be gotten, a property of it will be inaccessible for getting or setting.<br class="">&gt; &gt; <br class="">&gt; &gt; Set-only properties are always computed, and only used via assignment.<br class="">&gt; &gt; <br class="">&gt; &gt; e.g. foo = value<br class="">&gt; I understand that. If that's all you're allowed to do with a set-only property, then this is just sugar over 'setFoo(value)', and I think the sugar implies you could do more with 'foo' than you really can. I don't think it's worth the complexity.<br class="">&gt; <br class="">&gt; -Joe<br class="">&gt; <br class="">&gt; <br class="">&gt;<span class="Apple-converted-space">&nbsp;</span>

</div>_______________________________________________<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></div></blockquote></div><br class=""></div></div></body></html>