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?
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
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
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