<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="">-1&nbsp;</div><div class=""><br class=""></div><div class="">I personally think Optional has received too much special treatment in the language already. I’ve known folks who have written Swift professionally for almost a year until they realize Optional is just an enum. More magic syntax around it would only make this worse.</div><div class=""><br class=""></div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On Jan 25, 2017, at 10:35 AM, Jacob Bandes-Storch 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="">Agreed, IMO it would be quite dangerous for "a ??= b" to mean anything other than "a = a ?? b".<div class=""><br class=""></div><div class="">On another note, I don't see the value of "a? = b". I had never realized before that this works. Is this feature actually used in the wild? Should we consider removing it? (I could perhaps see some value if the assignment operator were overloadable, but it's not.)</div><div class="gmail_extra"><br clear="all" class=""><div class=""><div class="m_3617066003682949734gmail_signature" data-smartmail="gmail_signature"><div dir="ltr" class=""><div class="">Jacob<br class=""></div></div></div></div>
<br class=""><div class="gmail_quote">On Wed, Jan 25, 2017 at 10:28 AM, John McCall <span dir="ltr" class="">&lt;<a href="mailto:rjmccall@apple.com" target="_blank" class="">rjmccall@apple.com</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><span class=""><blockquote type="cite" class=""><div class="">On Jan 25, 2017, at 12:47 PM, Jacob Bandes-Storch via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:</div><div class="">Really? My observation from a quick test is that "a? = b" assigns b to a if a already has a value, or does nothing if it's nil. This is sort of the opposite of what's being proposed, which is that "a ?= b" should assign to a only if it does NOT have a value.<br class=""></div></blockquote><div class=""><br class=""></div></span>Right.&nbsp; On the other hand, this does seem like a poor spelling for the operator, given the ease of confusion.</div><div class=""><br class=""></div><div class="">Also, I'm finding it hard to imagine a use for this where the equivalent ?? invocation wouldn't be *much* clearer.&nbsp; It just feels like you must be doing something backwards — "I've filled in a default value for this variable, now overwrite it if this other value exists".&nbsp; Wouldn't the reverse generally be better?</div><span class="m_3617066003682949734HOEnZb"><font color="#888888" class=""><div class=""><br class=""></div><div class="">John.</div></font></span><div class=""><div class="m_3617066003682949734h5"><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="gmail_quote"><div dir="ltr" class="">On Wed, Jan 25, 2017 at 9:33 AM Joe Groff via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt; wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; On Jan 25, 2017, at 8:40 AM, Nichi Shin via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="m_3617066003682949734m_8108690658268912376gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; I’d like to propose a new operator for optional assignment in Swift.<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; The idea is that by using this operator (e.g. by doing a ?= b), the optional on the right would be assigned to the variable on the left only when it has something to assign (i.e. when it's not nil).<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
`a? = b` already does this. Maybe we need a fixit to make that more apparent, though.<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
-Joe<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; The implementation could be something as follows:<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; /// Optional Assignment Operator<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; infix operator ?=: AssignmentPrecedence<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; func ?=&lt;T&gt;(left: inout T, right: T?) {<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;&nbsp; &nbsp; &nbsp;if right != nil {<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;left = right!<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;&nbsp; &nbsp; &nbsp;}<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; }<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; func ?=&lt;T&gt;(left: inout T?, right: T?) {<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;&nbsp; &nbsp; &nbsp;if right != nil {<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;left = right<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;&nbsp; &nbsp; &nbsp;}<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; }<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; I hope you will consider adding this on a future release of this great programming language.<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt;<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; Kind regards,<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; N. S.<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; ______________________________<wbr class="">_________________<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; swift-evolution mailing list<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; <a href="mailto:swift-evolution@swift.org" class="m_3617066003682949734m_8108690658268912376gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="m_3617066003682949734m_8108690658268912376gmail_msg">
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="m_3617066003682949734m_8108690658268912376gmail_msg" target="_blank">https://lists.swift.org/mailma<wbr class="">n/listinfo/swift-evolution</a><br class="m_3617066003682949734m_8108690658268912376gmail_msg">
<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
______________________________<wbr class="">_________________<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
swift-evolution mailing list<br class="m_3617066003682949734m_8108690658268912376gmail_msg">
<a href="mailto:swift-evolution@swift.org" class="m_3617066003682949734m_8108690658268912376gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="m_3617066003682949734m_8108690658268912376gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="m_3617066003682949734m_8108690658268912376gmail_msg" target="_blank">https://lists.swift.org/mailma<wbr class="">n/listinfo/swift-evolution</a><br class="m_3617066003682949734m_8108690658268912376gmail_msg">
</blockquote></div>
______________________________<wbr class="">_________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank" class="">https://lists.swift.org/mailma<wbr class="">n/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class=""></div></div></div></blockquote></div><br class=""></div></div>
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>