<div dir="ltr">There have been a couple times where I&#39;ve wanted something like this:<div><br></div><div>1) A nil-resettable property without having to resort to making it an IUO. It would be nice to have the setter able to take a T? but the getter return T, and the setter would provide a default value in the event that it receives nil.</div><div><br></div><div>2) Once I was writing an API that would keep an array of things in a property, but I also wanted a shorthand version where the user could set it with a single value and have the setter transform that into the array internally. Looking back though, that&#39;s not really defensible; it&#39;s easy enough for the call site to just add two characters and write &quot;foo.property = [x]&quot;, and I probably wouldn&#39;t stand by that example today.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Sep 19, 2017 at 8:16 AM Nevin Brackett-Rozinsky via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">This may sound rather strange in the abstract, but recently I have encountered two situations where I would like to have a setter that accepts a different type than the getter returns.<div><br></div><div>In the first, the getter returns Foo and the setter should accept “@escaping @autoclosure () -&gt; Foo”, so that the expression assigned to the property is not evaluated until it is needed. (The closure is stored in a private property, which the getter evaluates then caches the result.)</div><div><br></div><div>In the second, I want a subscript whose getter returns a concrete type (in my case, subscripting a matrix by row returns an ArraySlice&lt;Element&gt;) while the setter can accept something more generic (any kind of Collection with the correct Element type).</div><div><br></div><div>Thoughts?</div><div><br></div><div>Nevin</div></div>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">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>
</blockquote></div>