<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2017-01-12 0:51 GMT+03:00 David Sweeris <span dir="ltr">&lt;<a href="mailto:davesweeris@mac.com" target="_blank">davesweeris@mac.com</a>&gt;</span>:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div><div class="h5"><blockquote type="cite"><div><div dir="ltr"><div class="m_3575933485129559063markdown-here-wrapper">
</div></div></div></blockquote></div></div><div>I don&#39;t understand the lines in the struct version where you assign something to `self`. What is &quot;.invalid&quot;, for example? I thought you&#39;d removed the enum altogether.</div></div></blockquote><div><br></div><div>I totally overlooked it. That can&#39;t be done with protocols, scrap that suggestion. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><span class=""><blockquote type="cite"><div dir="ltr"><div class="m_3575933485129559063markdown-here-wrapper"><p style="margin:0px 0px 1.2em!important">But pattern matching on structs is impossible—we can change that with a separate proposal. For example, we can allow destructuring structs/enums/classes by any combination of their properties:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="m_3575933485129559063hljs m_3575933485129559063language-swift" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important;display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248)"><span class="m_3575933485129559063hljs-class"><span class="m_3575933485129559063hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> <span class="m_3575933485129559063hljs-title" style="color:rgb(153,0,0);font-weight:bold;color:rgb(68,85,136);font-weight:bold">S</span> </span>{
    <span class="m_3575933485129559063hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> foo: <span class="m_3575933485129559063hljs-type" style="color:rgb(68,85,136);font-weight:bold">Int</span>
    <span class="m_3575933485129559063hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> bar: <span class="m_3575933485129559063hljs-type" style="color:rgb(68,85,136);font-weight:bold">Double</span>
    <span class="m_3575933485129559063hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">var</span> buz: <span class="m_3575933485129559063hljs-type" style="color:rgb(68,85,136);font-weight:bold">String</span> { <span class="m_3575933485129559063hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> <span class="m_3575933485129559063hljs-string" style="color:rgb(221,17,68)">&quot;42&quot;</span> }
}

<span class="m_3575933485129559063hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> s = <span class="m_3575933485129559063hljs-type" style="color:rgb(68,85,136);font-weight:bold">S</span>(foo: <span class="m_3575933485129559063hljs-number" style="color:rgb(0,128,128)">42</span>, bar: <span class="m_3575933485129559063hljs-number" style="color:rgb(0,128,128)">42.0</span>)

<span class="m_3575933485129559063hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">let</span> <span class="m_3575933485129559063hljs-type" style="color:rgb(68,85,136);font-weight:bold">S</span>(foo: x, buz: z) = s</code></pre></div></div></blockquote></span>I was under the impression that we could switch over anything that had the `~=` operator defined. Is that not the case?</div></blockquote><div><br></div><div>Well, this one is a bit different, but it&#39;s horribly off-topic for this thread.</div></div></div></div>