<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="">This is a draft.</div><div class="">Sorry for the multi-week delay, been too tired after work to think about this, since it is a long weekend, I continued work on this looking for feedback now. The biggest addition is what to do with parameters to functions by utilizing the nil-coalescing operator in some new ways. I did not finish the detailed design, want to see if it is a good direction first.</div><div class=""><br class=""></div><div class=""><h1 class="" style="box-sizing: border-box; font-size: 2.25em; margin-right: 0px; margin-bottom: 16px; margin-left: 0px; line-height: 1.2; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255); margin-top: 0px !important;">Non-Conditional Optional Unwrapping</h1><ul class="" style="box-sizing: border-box; padding: 0px 0px 0px 2em; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><li class="" style="box-sizing: border-box;">Proposal:&nbsp;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/NNNN-name.md" class="" style="box-sizing: border-box; background-color: transparent; color: rgb(64, 120, 192); text-decoration: none;">SE-</a>TBD</li><li class="" style="box-sizing: border-box;">Author(s):&nbsp;Paul Ossenbruggen, Craig Cruden&nbsp;</li><li class="" style="box-sizing: border-box;">Status:&nbsp;<strong class="" style="box-sizing: border-box;">Awaiting review</strong></li><li class="" style="box-sizing: border-box;">Review manager: TBD</li></ul><h2 class="" style="box-sizing: border-box; margin-top: 1em; margin-bottom: 16px; line-height: 1.225; font-size: 1.75em; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-introduction" class="anchor" href="https://github.com/apple/swift-evolution#introduction" aria-hidden="true" style="box-sizing: border-box; background-color: transparent; color: rgb(64, 120, 192); text-decoration: none; display: inline-block; padding-right: 2px; margin-left: -18px; line-height: 1;"><span class="octicon octicon-link" style="box-sizing: border-box; font-weight: normal; font-size: 16px; line-height: 1; font-family: octicons; display: inline-block; text-rendering: auto; -webkit-font-smoothing: antialiased; -webkit-user-select: none; color: rgb(0, 0, 0); vertical-align: middle; visibility: hidden;"></span></a>Introduction</h2><p class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">Currently there are many cases, in Swift, where control flow must be used to handle optionals. For example</p></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""></blockquote><span style="font-family: Menlo;" class="">&nbsp; &nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span></span><span style="font-family: Menlo; color: rgb(187, 44, 162);" class="">let</span><span style="font-family: Menlo;" class=""> a : </span><span style="font-family: Menlo; color: rgb(112, 61, 170);" class="">Int</span><span style="font-family: Menlo;" class="">? = </span><span style="font-family: Menlo; color: rgb(39, 42, 216);" class="">10</span><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>let</span>&nbsp;b = <span style="font-variant-ligatures: no-common-ligatures; color: #272ad8" class="">5</span></div><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class=""><br class=""></div></div><span style="font-family: Menlo; color: rgb(187, 44, 162);" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>if</span><span style="font-family: Menlo;" class=""> </span><span style="font-family: Menlo; color: rgb(187, 44, 162);" class="">let</span><span style="font-family: Menlo;" class=""> a = a {</span><br class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""></blockquote><span style="font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span style="font-family: Menlo; color: rgb(187, 44, 162);" class="">return</span><span style="font-family: Menlo;" class=""> a + b</span><br class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""></blockquote><span style="font-family: Menlo;" class="">&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>} </span><span style="font-family: Menlo; color: rgb(187, 44, 162);" class="">else</span><span style="font-family: Menlo;" class=""> {</span><br class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""></blockquote><span style="font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span style="font-family: Menlo; color: rgb(187, 44, 162);" class="">return</span><span style="font-family: Menlo;" class=""> </span><span style="font-family: Menlo; color: rgb(187, 44, 162);" class="">nil</span><br class=""><span style="font-family: Menlo;" class="">&nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>}</span><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><br class=""></div></div></div><div class=""><div class=""><div class=""><p class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">Since we can’t operate on the optional for <b class="">a</b>, we need to unwrap it, if&nbsp;is non nil otherwise it should return a nil. For something this simple we have introduced control flow statements which makes the intent of the code harder to follow, adds many braces and is less linear. Code that is linear, in general, tends to be easier to follow, because at the end of it you know you have a certain result.&nbsp;</p><p class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">Swift-evolution thread:&nbsp;&nbsp;[swift-evolution] Brainstorming: Optional sugar inferred map</p></div></div><h2 class="" style="box-sizing: border-box; margin-top: 1em; margin-bottom: 16px; line-height: 1.225; font-size: 1.75em; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-motivation" class="anchor" href="https://github.com/apple/swift-evolution#motivation" aria-hidden="true" style="box-sizing: border-box; background-color: transparent; color: rgb(64, 120, 192); text-decoration: none; display: inline-block; padding-right: 2px; margin-left: -18px; line-height: 1;"><span class="octicon octicon-link" style="box-sizing: border-box; font-weight: normal; font-size: 16px; line-height: 1; font-family: octicons; display: inline-block; text-rendering: auto; -webkit-font-smoothing: antialiased; -webkit-user-select: none; color: rgb(0, 0, 0); vertical-align: middle; visibility: hidden;"></span></a>Motivation</h2><p class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">Often it is necessary to add conditional code for optionals earlier in the code than you like when it would be nice to leave it as an optional longer, thus allowing your code to be more linear. Optional chaining already allows code to be linearized for properties this proposal builds upon that.&nbsp;</p><h2 class="" style="box-sizing: border-box; margin-top: 1em; margin-bottom: 16px; line-height: 1.225; font-size: 1.75em; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-proposed-solution" class="anchor" href="https://github.com/apple/swift-evolution#proposed-solution" aria-hidden="true" style="box-sizing: border-box; background-color: transparent; color: rgb(64, 120, 192); text-decoration: none; display: inline-block; padding-right: 2px; margin-left: -18px; line-height: 1;"><span class="octicon octicon-link" style="box-sizing: border-box; font-weight: normal; font-size: 16px; line-height: 1; font-family: octicons; display: inline-block; text-rendering: auto; -webkit-font-smoothing: antialiased; -webkit-user-select: none; color: rgb(0, 0, 0); vertical-align: middle; visibility: visible;"></span></a>Proposed solution</h2><p class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; background-color: rgb(255, 255, 255);"><font size="3" class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" class="">The solution is to allow the question mark operator to be applied to an optional value in places that it&nbsp;currently is prohibited.&nbsp;</font></font><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: medium;" class="">This already works in Swift 2, for objects. For example:&nbsp;</span></p><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(209, 47, 27); font-family: Menlo; margin: 0px; line-height: normal;" class=""><span style="color: rgb(187, 44, 162);" class="">var</span><span style="color: rgb(0, 0, 0);" class="">&nbsp;</span><span style="color: rgb(79, 129, 135);" class="">v</span><span style="color: rgb(0, 0, 0);" class="">&nbsp;:&nbsp;</span><span style="color: rgb(112, 61, 170);" class="">String</span><span style="color: rgb(0, 0, 0);" class="">? =&nbsp;</span>"It exists"</div></div></div></div></div><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(209, 47, 27); font-family: Menlo; margin: 0px; line-height: normal;" class=""><span style="color: rgb(187, 44, 162);" class="">var</span>&nbsp;<span style="color: rgb(79, 129, 135);" class="">w</span>&nbsp;:&nbsp;<span style="color: rgb(112, 61, 170);" class="">String</span>?&nbsp;<span style="color: rgb(0, 0, 0);" class="">=</span>&nbsp;<span style="color: rgb(187, 44, 162);" class="">nil</span></div></div></div></div></div><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(61, 29, 129); font-family: Menlo; margin: 0px; line-height: normal;" class=""><span style="color: rgb(79, 129, 135);" class="">v</span><span style="color: rgb(0, 0, 0);" class="">?.</span>appendContentsOf<span style="color: rgb(0, 0, 0);" class="">(</span><span style="color: rgb(209, 47, 27);" class="">"."</span><span style="color: rgb(0, 0, 0);" class="">)</span></div></div></div></div></div><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(79, 129, 135); font-family: Menlo; margin: 0px; line-height: normal;" class="">v -&gt; “It exists."</div></div></div></div></div><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(61, 29, 129); font-family: Menlo; margin: 0px; line-height: normal;" class=""><span style="color: rgb(79, 129, 135);" class="">w</span><span style="color: rgb(0, 0, 0);" class="">?.</span>appendContentsOf<span style="color: rgb(0, 0, 0);" class="">(</span><span style="color: rgb(209, 47, 27);" class="">"."</span><span style="color: rgb(0, 0, 0);" class="">)</span></div></div></div></div></div><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(79, 129, 135); font-family: Menlo; margin: 0px; line-height: normal;" class="">w -&gt; nil</div></div></div></div></div></blockquote><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(79, 129, 135); font-family: Menlo; margin: 0px; line-height: normal;" class=""><br class=""></div><div class=""><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: medium;" class="">The ? operator is unwrapped and the appendContentsOf method is only executed if the value is non-nil.&nbsp;</span><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class=""><span style="background-color: rgb(255, 255, 255);" class="">However you can not do the following, which seems natural:</span></font></div><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class=""><br class=""></font></div></div></div></div></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><span style="font-family: Menlo;" class="">a? + b</span></div></div></div></div></div></div></blockquote><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class=""><br class=""></font></div></div></div></div></div><p class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; background-color: rgb(255, 255, 255);"><font size="3" class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" class="">You could write the code from the introduction using the map function, map on an optional will only execute if <b class="">a</b> is non-nil:</font></font></p></div><span style="font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp;</span><span style="font-family: Menlo;" class="">a.</span><span style="color: rgb(61, 29, 129); font-family: Menlo;" class="">map</span><span style="font-family: Menlo;" class="">&nbsp;{$0 + b}&nbsp;</span><br class=""><span style="font-family: Menlo;" class="">&nbsp; &nbsp;&nbsp;</span><div class=""><div class=""><div class=""><span style="background-color: rgb(255, 255, 255);" class=""><font size="3" class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" class="">This is pretty non intuitive to someone not familiar with map on optionals, plus they must deal with the closure and an&nbsp;unarmed&nbsp;parameter. Either that or they&nbsp;will have to use the <i class="">if let</i> form to unwrap. With this proposal, however, you can much more simply and&nbsp;intuitively write it exactly as shown above: a? + b. It is an optional result where the result is nil or the unwrapped <b class="">a </b>plus&nbsp;<b class="">b</b>.&nbsp;</font></font></span><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: medium; background-color: rgb(255, 255, 255);" class="">The code is very easy to understand and it eliminates the control flow.&nbsp;</span></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class=""><br class=""></font></div><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class="">One area of complication is if you are using the optional in a parameter to a function that takes a non optional as in&nbsp;the following example:</font></div></div></div></div></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><br class=""></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><span style="color: rgb(187, 44, 162);" class="">func</span>&nbsp;doSomething(value:&nbsp;<span style="color: rgb(112, 61, 170);" class="">Int</span>) -&gt;&nbsp;<span style="color: rgb(112, 61, 170);" class="">Int</span>&nbsp;{</div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp;&nbsp;<span style="color: rgb(187, 44, 162);" class="">return</span>&nbsp;value</div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class="">}</div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><span style="color: rgb(49, 89, 93); font-family: Menlo;" class="">doSomething</span><span style="font-family: Menlo;" class="">(a</span><span style="font-family: Menlo; color: rgb(79, 129, 135);" class="">?</span><span style="font-family: Menlo;" class="">) // illegal</span></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><br class=""></div></div></div></div></div></div></div></blockquote><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class="">The&nbsp;question mark would not be allowed as a&nbsp;parameter to a function because the code surrounding&nbsp;the call site should not run if the parameter is nil.</font></div><div class=""><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: medium;" class=""><br class=""></span></div><div class=""><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: medium;" class="">If we were to do this with map, you would do the following:</span></div><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class=""><br class=""></font></div></div></div></div></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal; color: rgb(49, 89, 93);" class=""><div style="color: rgb(0, 0, 0); margin: 0px; line-height: normal;" class=""><span style="color: rgb(187, 44, 162);" class="">let</span>&nbsp;c : Int? =&nbsp;nil</div><div style="color: rgb(0, 0, 0); margin: 0px; line-height: normal;" class=""></div><div style="color: rgb(0, 0, 0);" class=""><span style="color: rgb(187, 44, 162);" class="">let</span>&nbsp;ra&nbsp;=&nbsp;<span style="color: rgb(79, 129, 135);" class="">a</span>.<span style="color: rgb(61, 29, 129);" class="">map</span>&nbsp;{&nbsp;<span style="color: rgb(49, 89, 93);" class="">doSomething</span>($0) }</div></div></div></div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class=""><span style="color: rgb(187, 44, 162);" class="">let</span>&nbsp;rc =&nbsp;<span style="color: rgb(79, 129, 135);" class="">c</span>.<span style="color: rgb(61, 29, 129);" class="">map</span>&nbsp;{&nbsp;<span style="color: rgb(49, 89, 93);" class="">doSomething</span>($0) }</div></div></div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div class=""><br class=""></div></div></div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">ra -&gt; 5</div></div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">rc -&gt; nil</div></div></div></div></div></div></div></div></blockquote><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><br class=""></div><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class="">To address this, the&nbsp;nil-coalescing operator would allow $$,&nbsp;where $$ is&nbsp;the unwrapped unnamed result of the expression when non nil:&nbsp;</font></div><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class=""><br class=""></font></div></div></div></div></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">func</span> doSomething(value: <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">Int</span>) -&gt; <span style="font-variant-ligatures: no-common-ligatures; color: #703daa" class="">Int</span> {</div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; <span style="font-variant-ligatures: no-common-ligatures; color: #bb2ca2" class="">return</span>&nbsp;value</div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class="">}</div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><br class=""></div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div class=""><span style="color: rgb(187, 44, 162);" class="">let</span>&nbsp;ra = a ?? <span style="color: rgb(49, 89, 93);" class="">doSomething</span>(<span style="color: rgb(79, 129, 135);" class="">$$</span>)&nbsp;</div></div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><span style="color: rgb(187, 44, 162);" class="">let</span><span style="color: rgb(0, 0, 0);" class="">&nbsp;rc = c ??&nbsp;</span><font color="#31595d" class="">doSomething</font><span style="color: rgb(0, 0, 0);" class="">(</span><font color="#4f8187" class="">$$</font><span style="color: rgb(0, 0, 0);" class="">)</span></div></div></div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(49, 89, 93); margin: 0px; line-height: normal;" class=""><span style="color: rgb(0, 0, 0);" class=""><br class=""></span></div></div></div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(49, 89, 93); margin: 0px; line-height: normal;" class=""><div style="color: rgb(0, 0, 0); font-family: Helvetica;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">ra -&gt; 5</div></div></div></div></div></div></div></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="color: rgb(49, 89, 93); margin: 0px; line-height: normal;" class=""><div style="color: rgb(0, 0, 0); font-family: Helvetica;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">rc -&gt; nil</div></div></div></div></div></div></div></div></div></div></div></blockquote><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div style="color: rgb(0, 0, 0); font-family: Menlo;" class=""><br class=""></div><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class="">multiple statements would allow a statement block after&nbsp;the&nbsp;nil-coalescing operator:</font></div></div><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class=""><br class=""></font></div><div class=""><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><span style="color: rgb(187, 44, 162);" class="">func</span>&nbsp;doSomethingElse(value1:&nbsp;<span style="color: rgb(112, 61, 170);" class="">Int,</span>&nbsp;value2:&nbsp;<span style="color: rgb(112, 61, 170);" class="">Int</span>) -&gt; Void&nbsp;{</div></div></div></div></div></div></div></div></div></div></div><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp;&nbsp;<span style="color: rgb(187, 44, 162);" class="">return</span>&nbsp;value1 + value2</div></div></div></div></div></div></div></div></div></div></div><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class="">}</div><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><span style="font-family: Menlo;" class=""><span style="color: rgb(187, 44, 162);" class="">let</span>&nbsp;ra = a ?? {&nbsp;</span></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></blockquote><span style="font-family: Menlo;" class=""><font color="#31595d" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>&nbsp;&nbsp;doSomething</font>(<font color="#4f8187" class="">$$</font>)</span>&nbsp;<br class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>&nbsp;&nbsp;doSomethingElse(</font><span style="font-family: Menlo; color: rgb(79, 129, 135);" class="">$$, value2: b</span><font face="Menlo" class="">)&nbsp;</font><br class=""><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><font face="Menlo" class="">}</font></div><div style="margin: 0px; line-height: normal;" class=""><font face="Menlo" class="">&nbsp;</font></div></div></div></div></div><div class="" style="font-family: Helvetica;"><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div style="margin: 0px; line-height: normal;" class=""></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></blockquote><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><div style="margin: 0px; line-height: normal;" class=""></div></div></div></div></div><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class="">multiple optionals would work utilizing a tuple that could address elements using the $n syntax:&nbsp;</font></div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>a? + c?&nbsp;</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>(a, c) ??&nbsp;doSomethingElse($0,&nbsp;<span style="color: rgb(79, 129, 135); font-family: Menlo;" class="">value2</span>: $1)</div><div class=""><br class=""></div><div class=""><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" size="3" class="">Using a tuple as opposed to an array would allow disparate types. All values would have to be non-nil for&nbsp;the optional to execute the code after the ??.&nbsp;</font></div><div class=""><div class=""><h2 class="" style="box-sizing: border-box; margin-top: 1em; margin-bottom: 16px; line-height: 1.225; font-size: 1.75em; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);">Detailed Design</h2><p class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);"><span style="font-size: medium;" class="">Continuing from&nbsp;the above example, If&nbsp;</span><b class="">a</b><span style="font-size: medium;" class="">&nbsp;is nil, the rest of the operation will be short circuited, so that if there was a complicated&nbsp;operation to where&nbsp;</span><b class="">b</b><span style="font-size: medium;" class="">&nbsp;is that calculation would not occur. Furthermore,&nbsp;</span><b class="">a</b><span style="font-size: medium;" class="">&nbsp;and&nbsp;</span><b class="">b</b><span style="font-size: medium;" class="">&nbsp;must resolve to&nbsp;the same type when unwrapped.&nbsp;</span></p><div class="">&lt;Not Complete&gt;</div></div></div></div></div></div></div></div></div><div class=""><div class=""><br class=""></div></div><div class=""><h2 class="" style="box-sizing: border-box; margin-top: 1em; margin-bottom: 16px; line-height: 1.225; font-size: 1.75em; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-impact-on-existing-code" class="anchor" href="https://github.com/apple/swift-evolution#impact-on-existing-code" aria-hidden="true" style="box-sizing: border-box; background-color: transparent; color: rgb(64, 120, 192); text-decoration: none; display: inline-block; padding-right: 2px; margin-left: -18px; line-height: 1;"><span class="octicon octicon-link" style="box-sizing: border-box; font-weight: normal; font-size: 16px; line-height: 1; font-family: octicons; display: inline-block; text-rendering: auto; -webkit-font-smoothing: antialiased; -webkit-user-select: none; color: rgb(0, 0, 0); vertical-align: middle; visibility: hidden;"></span></a>Impact on existing code</h2><p class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255);">Existing code would not be affected by this change.&nbsp;</p><h2 class="" style="box-sizing: border-box; margin-top: 1em; margin-bottom: 16px; line-height: 1.225; font-size: 1.75em; padding-bottom: 0.3em; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(238, 238, 238); color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255);"><a id="user-content-alternatives-considered" class="anchor" href="https://github.com/apple/swift-evolution#alternatives-considered" aria-hidden="true" style="box-sizing: border-box; background-color: transparent; color: rgb(64, 120, 192); text-decoration: none; display: inline-block; padding-right: 2px; margin-left: -18px; line-height: 1;"><span class="octicon octicon-link" style="box-sizing: border-box; font-weight: normal; font-size: 16px; line-height: 1; font-family: octicons; display: inline-block; text-rendering: auto; -webkit-font-smoothing: antialiased; -webkit-user-select: none; color: rgb(0, 0, 0); vertical-align: middle; visibility: hidden;"></span></a>Alternatives considered</h2><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><b class="">Completely implicit unwrapping</b></div><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;">The only other alternative considered was Craig Cruden’s initial brainstorming idea of eliminating the need to unwrap it.&nbsp;</div><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><br class=""></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class=""><span style="color: rgb(187, 44, 162);" class="">func</span>&nbsp;add(a :&nbsp;<span style="color: rgb(112, 61, 170);" class="">Int</span>?, b :&nbsp;<span style="color: rgb(112, 61, 170);" class="">Int</span>) -&gt;&nbsp;<span style="color: rgb(112, 61, 170);" class="">Int</span>? {</div></div></div></div></div></div></div></div><div class=""><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div class=""><div class=""><div style="margin: 0px; line-height: normal;" class="">&nbsp; &nbsp;&nbsp;<span style="color: rgb(187, 44, 162);" class="">return</span>&nbsp;a + b</div></div></div></div></div></div></div></div><div class=""><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div class=""><div class=""><div style="color: rgb(0, 0, 0); margin: 0px; line-height: normal;" class="">}</div></div></div></div></div></div></div></div></blockquote><div class=""><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><div class=""><div class=""><div style="margin: 0px; line-height: normal; font-family: Menlo;" class=""><div class=""><div class=""><div class=""><br class=""></div></div></div></div></div></div></div></div><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><div class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px !important;">This was interesting in that it got the discussion started, but eliminates much of the benefit of optionals, as Thorsten Seitz said:</div><div class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px !important;"><br class=""></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><div class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px !important;"><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;" class="">Too much hidden magic IMO. This would mean losing the benefits of optionals, i.e. making explicit where optional cases occur and that handling the missing case has to be considered.&nbsp;</div></div></div></blockquote><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><div class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px !important;"><div class=""><br class=""></div><div class=""><br class=""></div></div><div class="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 0px !important;"></div></div><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><b class="">Don’t try to solve the parameter cases&nbsp;</b></div><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;">The extensions to the nil-coalescing operator may add complexity to the proposal. Perhaps that should be a separate proposal. This could be useful on its own.&nbsp;</div><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><br class=""></div><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><br class=""></div><div class="" style="box-sizing: border-box; margin-top: 0px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: rgb(255, 255, 255); margin-bottom: 0px !important;"><br class=""></div></body></html>