2014-06-11 3 views
6

"이 기능을 사용하지 않아야합니까?" 문제. 그러나 나는 이것을 더 잘 표현할 수있는 방법을 찾아 낼 수 없다.Swift의 패턴 일치에서 예기치 않은 결과가 발생했습니다.

enum MyEnum { 
    case A, B, C 
} 

let tuple = (MyEnum.C, MyEnum.A)  
var x: String 

switch tuple { 
case (.A, _): 
    x = "(A, something)" 
case (_, .A): 
    x = "(something, A)" 
case (_, .B): 
    x = "(something, B)" 
case (.C, .C): 
    x = "(C, C)" 
default: 
    x = "default" 
} 

x // -> "default" 

x는 기본 분기가 찍은 의미 "default"로 평가합니다.

그러나 "(something, A)"과 두 번째 case 문이 일치해야합니다. 내가 이해 한 것에서 (_, .A)은 첫 번째 튜플 요소의 어떤 것과도 일치해야하고 두 번째 요소는 .A이어야합니다.

케이스를 위로 이동하면 예상대로 일치합니다. 다른 튜플은 내가 기대하는 곳과도 일치합니다.

무엇이 누락 되었습니까? 왜 두 번째 사건과 일치하지 않습니까?

+4

흥미롭게도 재현성이 있습니다 ... 다른 사례 문장 ('default' 이외)을 주석 처리 할 때도 예상대로 작동합니다. 버그 리포트가 필요한 것처럼 보입니다! – Jack

+0

테스트 케이스의 다른 순서가 올바른 결과를 만들어내는 것처럼 보입니다. 놀이터 일인지 확인하려고합니다. – Jack

+0

그렇지 않습니다. 나는 일반 애플 리케이션을 작성하는 동안 그것을 발견했다. :) 여기 누군가가 실수를 지적하지 않으면 나는 분명히 버그 보고서를 제출할 것입니다. – nschum

답변

1

이 동작은 베타 3에서 수정되었습니다. 이제 순서가 무엇이든 (Something, A)이 표시됩니다.

관련 문제