<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Charles,<div class=""><br class=""></div><div class="">I do believe you :)</div><div class=""><br class=""></div><div class="">The problem is that this doesn't work without a compiler warning if you switch over every case except for the deprecated ones because then the compiler warns that "default will never be executed".</div><div class=""><br class=""></div><div class="">As per my first mail feel free to try this out in a playground:</div><div class=""><br class=""></div><div class=""><div class=""><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(186, 45, 162);">private</span>&nbsp;<span class="" style="color: rgb(186, 45, 162);">func</span>&nbsp;handleLocalAuthenticationError(<span class="" style="color: rgb(186, 45, 162);">_</span>&nbsp;error:&nbsp;<span class="" style="color: rgb(112, 61, 170);">LAError</span>) {</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);">&nbsp; &nbsp;&nbsp;<span class="" style="color: rgb(186, 45, 162);">switch</span>&nbsp;error.<span class="" style="color: rgb(112, 61, 170);">code</span>&nbsp;{</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(62, 30, 129); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span><span class="" style="text-decoration: underline; color: rgb(186, 45, 162);">c</span><span class="" style="color: rgb(186, 45, 162);">ase</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;.</span>userCancel<span class="" style="color: rgb(0, 0, 0);">, .</span>appCancel<span class="" style="color: rgb(0, 0, 0);">, .</span>systemCancel<span class="" style="color: rgb(0, 0, 0);">:</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// Handle cancelation</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(62, 30, 129); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span><span class="" style="text-decoration: underline; color: rgb(186, 45, 162);">c</span><span class="" style="color: rgb(186, 45, 162);">ase</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;.</span>authenticationFailed<span class="" style="color: rgb(0, 0, 0);">:</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// Handle failure</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(62, 30, 129); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span><span class="" style="text-decoration: underline; color: rgb(186, 45, 162);">c</span><span class="" style="color: rgb(186, 45, 162);">ase</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;.</span>passcodeNotSet<span class="" style="color: rgb(0, 0, 0);">:</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// Handle passcode absence</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(62, 30, 129); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span><span class="" style="text-decoration: underline; color: rgb(186, 45, 162);">c</span><span class="" style="color: rgb(186, 45, 162);">ase</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;.</span>biometryNotEnrolled<span class="" style="color: rgb(0, 0, 0);">:</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// Handle no biometry enrollment</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(62, 30, 129); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span><span class="" style="text-decoration: underline; color: rgb(186, 45, 162);">c</span><span class="" style="color: rgb(186, 45, 162);">ase</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;.</span>biometryNotAvailable<span class="" style="color: rgb(0, 0, 0);">:</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// Handle no biometry availabe</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(62, 30, 129); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span><span class="" style="text-decoration: underline; color: rgb(186, 45, 162);">c</span><span class="" style="color: rgb(186, 45, 162);">ase</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;.</span>biometryLockout<span class="" style="color: rgb(0, 0, 0);">:</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// Handle biometry Lockout</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(62, 30, 129); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span><span class="" style="text-decoration: underline; color: rgb(186, 45, 162);">c</span><span class="" style="color: rgb(186, 45, 162);">ase</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;.</span>userFallback<span class="" style="color: rgb(0, 0, 0);">:</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// Handle user fallback</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(62, 30, 129); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span><span class="" style="text-decoration: underline; color: rgb(186, 45, 162);">c</span><span class="" style="color: rgb(186, 45, 162);">ase</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;.</span>invalidContext<span class="" style="color: rgb(0, 0, 0);">:</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// Handle failure with invalid context</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(62, 30, 129); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span><span class="" style="text-decoration: underline; color: rgb(186, 45, 162);">c</span><span class="" style="color: rgb(186, 45, 162);">ase</span><span class="" style="color: rgb(0, 0, 0);">&nbsp;.</span>notInteractive<span class="" style="color: rgb(0, 0, 0);">:</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// Handle no interaction allowed error</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(186, 45, 162); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp;&nbsp;</span>default<span class="" style="color: rgb(0, 0, 0);">: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span style="color: rgb(0, 132, 0);" class="">// &lt;- Here the compiler emits a warning that the default will never be executed.</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0); background-color: rgb(255, 255, 255);"><span class="" style="color: rgb(0, 0, 0);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>// hopefully only deprecated cases</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class="" style="color: rgb(186, 45, 162);">break</span></div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);">&nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);"><span class="" style="text-decoration: underline;">}</span></div></div></div><div class=""><br class=""></div><div class="">- Dennis<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Nov 5, 2017, at 4:13 PM, Charles Srstka &lt;<a href="mailto:cocoadev@charlessoft.com" class="">cocoadev@charlessoft.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class="">On Nov 5, 2017, at 3:14 AM, Dennis Weissmann &lt;<a href="mailto:dennis@dennisweissmann.me" class="">dennis@dennisweissmann.me</a>&gt; wrote:<br class=""><br class="">Hi Charles,<br class=""><br class="">You are right (the `default` case would not catch the deprecated values but only new ones introduced in future releases), but the compiler doesn’t seem to know that :(<br class=""><br class="">But now that you say it, one approach could be to pattern match the raw values (and, well, have a default clause, which I really want to avoid) đź¤”<br class=""><br class="">- Dennis<br class=""><br class="">Sent from my iPhone<br class=""></blockquote><br class="">Hi Dennis,<br class=""><br class="">What I am saying is that the new cases have the same raw values as the old ones. touchIDNotAvailable is -6; biometryNotAvailable is -6. touchIDNotEnrolled is -7; biometryNotEnrolled is -7. touchIDLockout it -8; biometryLockout is -8. They’re just aliases to each other, so if you handle one, you don’t have to handle the other. You can literally ignore the deprecated values and treat them as if they don’t exist. Try this code for yourself if you don’t believe me:<br class=""><br class="">let err = LAError.touchIDLockout<br class=""><br class="">switch err {<br class="">case LAError.biometryLockout:<br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>print("biometry lockout")<br class="">default:<br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>print("default")<br class="">}<br class=""><br class="">This prints â€śbiometry lockout”.<br class=""><br class="">Charles<br class=""><br class=""></div></div></blockquote></div><br class=""></div></body></html>