Non mi è chiaro come let
è usato in switch
dichiarazioni.
Considera questo:
let greeting = (1,10)
switch greeting {
case let (x,y) where x == y:
print("hello")
case (x,y) where x < y: //error here
print("what"s up")
default: "No match"
}
Secondo il Documenti Apple:
[...] i pattern in un caso possono anche associare costanti usando la parola chiave let (possono anche associare variabili usando la parola chiave var). Queste costanti (o variabili) possono quindi essere referenziate in una corrispondente clausola where e in tutto il resto del codice nell'ambito del caso. Detto questo, se il caso contiene più pattern che corrispondono all'espressione di controllo, nessuno di questi pattern può contenere associazioni costanti o variabili.
Qual è la tupla (x, y)
legato al mio esempio, e perché non è possibile fare di nuovo riferimento?
risposte:
1 per risposta № 1Dalla tua citazione dalla documentazione di Swift:
... può quindi essere referenziato in una corrispondente clausola where e in tutto il resto del codice nell'ambito del caso.
Quindi nel primo caso
case let (x,y) where x == y:
print("hello")
greeting
(che è la tupla (1, 10)
) è abbinato a modello
let (x,y) where x == y
e se corrisponde, x
è associato al primo elemento tupla e y
al secondo.
Questa associazione è limitata all'ambito del primo caso, e non può essere utilizzato nel secondo o in altri casi.
Per compilare il codice, aggiungine un altro let
vincolante per il secondo Astuccio:
switch greeting {
case let (x,y) where x == y:
print("(x) is equal to (y)")
case let (x,y) where x < y:
print("(x) is less than (y)")
default:
print("No match")
}