2014-06-11 3 views
6

Ci scusiamo per "Non dovrebbe questo lavoro?" domanda. Ma non riesco a capire un modo migliore per esprimere questo.Risultato inatteso a causa dell'ordine nel modello di corrispondenza di 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 viene valutato come "default", che significa che il ramo predefinito stata presa.

Tuttavia, mi aspettavo "(something, A)" e la seconda dichiarazione caso per abbinare. Da quello che ho capito (_, .A) dovrebbe corrispondere a qualsiasi cosa nel primo elemento di tupla e .A nel secondo.

Se sposto la custodia (_, .A) in alto, corrisponde a quanto mi aspetto. Altre tuple corrispondono anche dove mi aspetto che lo facciano.

Cosa mi manca? Perché questo non corrisponde al secondo caso?

+4

Interessantemente riproducibile ... Anche quando commento una qualsiasi delle altre dichiarazioni di caso (diverse da 'default'), funziona come previsto. Sembra che sia necessaria una segnalazione di bug! – Jack

+0

Sembra che qualsiasi altro ordinamento dei casi di test produca il risultato corretto ... andando a controllare se è una cosa del parco giochi o no .. – Jack

+0

Non lo è. L'ho trovato mentre scrivevo un'app normale. :) Scriverò sicuramente una segnalazione di bug a meno che qualcuno qui non indichi un errore. – nschum

risposta

1

Questo comportamento è stato corretto in beta 3. Ora mostra (Something, A) qualunque sia l'ordine.