<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="">It’s actually more complicated than that.<div class=""><br class=""></div><div class=""><b class="">case (0, 0):</b>&nbsp;is a <i class="">tuple-pattern</i>, so its interpretation is well defined. <b class="">case int_1_1:</b>&nbsp;must be an <i class="">expression-pattern</i>, since it does’t match any of the other pattern kinds. So it should compare the value of the pattern expression <b class="">case_1_1</b>&nbsp;against the value of the switch expression <b class="">(x, y)</b>.</div><div class=""><br class=""></div><div class="">Now, the Swift Reference, in the <i class="">Expression Patterns</i>&nbsp;section, says</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">The expression represented by the expression pattern is compared with the value of an input expression using the Swift standard library ~= operator. The match succeeds if the ~= operator returns <b class="">true</b>. <i class="">By default, the ~= operator compares two values of the same type using the == operator.</i> …</div><div class=""><br class=""></div></blockquote>If this were true, then my code would compile and work as I expected.<div class=""><br class=""></div><div class="">But in fact, I observe that the expression <b class="">int_1_1 == (x, y)</b>&nbsp;compiles, but the expression <b class="">int_1_1 ~= (x, y)</b>&nbsp;gets the error “Binary operator ‘~=‘ cannot be applied to two ‘(int, int)’ operands.”</div><div class=""><br class=""></div><div class="">This strongly suggests that the emphasized line in the Swift Reference quote does not correctly describe the language behavior — there is a bug either in the documentation (~= was not intended to be defined for tuple types) or in the standard library (~= was intended to be defined for tuple types, but never got implemented).</div><div class=""><br class=""></div><div class="">Regards,</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>Neil<br class=""><div class=""><div class=""><div class=""><br class=""></div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jul 6, 2016, at 10:00 AM, Shane S &lt;<a href="mailto:electro_alchemy@hotmail.com" class="">electro_alchemy@hotmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">I’m not convinced that I see this as a bug, maybe more of a feature request?<br class=""><br class="">The test given seems to be conflating a tuple-type with tuple-pattern…<br class=""><br class="">Shane<br class=""><br class=""><br class=""><blockquote type="cite" class="">On Jul 5, 2016, at 6:16 PM, Neil Faiman via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:<br class=""><br class="">SR-1993.<br class=""><br class=""><blockquote type="cite" class="">On Jul 5, 2016, at 4:15 PM, Jordan Rose &lt;<a href="mailto:jordan_rose@apple.com" class="">jordan_rose@apple.com</a>&gt; wrote:<br class=""><br class="">I'd definitely consider that a bug. Can you file it at <a href="http://bugs.swift.org" class="">bugs.swift.org</a>?<br class=""><br class="">Jordan<br class=""><br class=""><blockquote type="cite" class="">On Jul 4, 2016, at 14:56, Neil Faiman via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:<br class=""><br class="">(Resending — this didn’t get any responses when I sent it a month ago.)<br class=""><br class="">Swift 2.2 in Xcode 7.3.1.<br class=""><br class="">Apparently you cannot use a named tuple constant as an expression pattern in a case label.<br class=""><br class="">func test(x: Int, y: Int) -&gt; Int {<br class="">let int_1 = 1<br class="">switch x {<br class="">case 0:<br class=""> &nbsp;&nbsp;&nbsp;return 0<br class="">case int_1:<br class=""> &nbsp;&nbsp;&nbsp;return 1<br class="">default:<br class=""> &nbsp;&nbsp;&nbsp;break<br class="">}<br class=""><br class="">let int_1_1: (Int, Int) = (1, 1)<br class="">switch (x, y) {<br class="">case (0, 0):<br class=""> &nbsp;&nbsp;&nbsp;return 0<br class="">case int_1_1:<span class="Apple-tab-span" style="white-space:pre">        </span>// &lt;&lt;&lt;&lt;<br class=""> &nbsp;&nbsp;&nbsp;return 1<br class="">default:<br class=""> &nbsp;&nbsp;&nbsp;return -1<br class="">}<br class="">}<br class=""><br class="">error: expression pattern of type '(Int, Int)' cannot match values of type '(Int, Int)'<br class="">case int_1_1:<br class=""> &nbsp;&nbsp;&nbsp;&nbsp;^~~~~~~<br class=""><br class="">The error message is particularly amusing.<br class=""><br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>- Neil Faiman<br class="">_______________________________________________<br class="">swift-users mailing list<br class=""><a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-users<br class=""></blockquote><br class=""></blockquote><br class="">_______________________________________________<br class="">swift-users mailing list<br class=""><a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-users<br class=""></blockquote><br class=""></div></div></blockquote></div><br class=""></div></div></div></div></body></html>