<p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px">Swift enum cases with associated values are quite similar to function parameters, except that currently flexible specification with enum associated values, is only possible by using <span style="font-weight:600">Parameter Objects</span>. </p><blockquote style="margin:0px 0px 16px;padding:0px 1em;color:rgb(119,119,119);border-left-width:0.25em;border-left-style:solid;border-left-color:rgb(221,221,221);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px"><p style="margin-top:0px;margin-bottom:0px">The proposed solution is to enhance Swift enum associated values to support default values in a functionally equivalent way to default parameters on functions.</p></blockquote><h2 style="margin-top:24px;margin-bottom:16px;line-height:1.25;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:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol'"><a id="user-content-detailed-design" class="anchor" href="https://gist.github.com/AfricanSwift/bfeab7d930785ed5096939ce24bd6cbf#detailed-design" style="background-color:transparent;color:rgb(64,120,192);text-decoration:none;float:left;padding-right:4px;line-height:1"></a>Detailed design</h2><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px">For example, let's say we define a person case with associated values for <code style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;padding:0.2em 0px;margin:0px;background-color:rgba(0,0,0,0.0392157);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">firstname</code> and <code style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;padding:0.2em 0px;margin:0px;background-color:rgba(0,0,0,0.0392157);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">surname</code>:</p><div class="highlight highlight-source-swift" style="margin-bottom:16px;color:rgb(51,51,51);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px"><pre style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;margin-top:0px;margin-bottom:0px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal"><span class="pl-k" style="color:rgb(167,29,93)">enum</span> <span class="pl-k" style="color:rgb(167,29,93)">...</span> {
<span class="pl-k" style="color:rgb(167,29,93)">case</span> person(firstname: <span class="pl-c1" style="color:rgb(0,134,179)">String</span>, surname: <span class="pl-c1" style="color:rgb(0,134,179)">String</span>)
}</pre></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px">... then down the line let's say we want to extend it with a person's <code style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;padding:0.2em 0px;margin:0px;background-color:rgba(0,0,0,0.0392157);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">age</code>, however unlike functions, we're left only with imperfect options: </p><ul style="padding-left:2em;margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px"><li style="box-sizing: border-box;">break the API</li><li style="margin-top:0.25em">create a new case, e.g. person2(<span style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;white-space:pre-wrap;background-color:rgb(247,247,247)">firstname: </span><span class="pl-c1" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;white-space:pre-wrap;background-color:rgb(247,247,247);color:rgb(0,134,179)">String</span><span style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;white-space:pre-wrap;background-color:rgb(247,247,247)">, surname: </span><span class="pl-c1" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;white-space:pre-wrap;background-color:rgb(247,247,247);color:rgb(0,134,179)">String</span><span style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;white-space:pre-wrap;background-color:rgb(247,247,247)">, age: </span><span class="pl-c1" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;white-space:pre-wrap;background-color:rgb(247,247,247);color:rgb(0,134,179)">Int</span><span class="pl-c1" style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;white-space:pre-wrap;background-color:rgb(247,247,247);color:rgb(0,134,179)">)</span></li><li style="margin-top:0.25em">re-implement case with a parameter object</li></ul><h2 style="margin-top:24px;margin-bottom:16px;line-height:1.25;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:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol'">Pitch</h2><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px">Should it be possible to assign defaults to <em style="box-sizing: border-box;">enum associated values</em>, with a functional equivalence to function default parameter values (flexible API), for example:</p><div class="highlight highlight-source-swift" style="margin-bottom:16px;color:rgb(51,51,51);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px"><pre style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:14px;margin-top:0px;margin-bottom:0px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal"><span class="pl-k" style="color:rgb(167,29,93)">enum</span> <span class="pl-k" style="color:rgb(167,29,93)">...</span> {
<span class="pl-k" style="color:rgb(167,29,93)">case</span> person(firstname: <span class="pl-c1" style="color:rgb(0,134,179)">String</span>, surname: <span class="pl-c1" style="color:rgb(0,134,179)">String</span>, age: <span class="pl-c1" style="color:rgb(0,134,179)">Int</span>? <span class="pl-k" style="color:rgb(167,29,93)">=</span> <span class="pl-c1" style="color:rgb(0,134,179)">nil</span>)
}</pre></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px"></p><h2 style="margin-top:24px;margin-bottom:16px;line-height:1.25;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:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol'">Summary</h2><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:16px">Support defaults for enum associated values: to ensure that all the places where the <em style="box-sizing: border-box;">associated value case</em> was used would continue to work when new parameters (associated values) are added.<br></p>