Não é muito claro para mim como let
é usado em switch
afirmações.
Considere isto:
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"
}
De acordo com Docs da apple:
[...] padrões em um caso também podem ligar constantes usando a palavra-chave let (eles também podem ligar variáveis usando a palavra-chave var). Essas constantes (ou variáveis) podem ser referenciadas em uma cláusula where correspondente e em todo o restante do código dentro do escopo do caso. Dito isso, se o caso contiver vários padrões que correspondam à expressão de controle, nenhum desses padrões poderá conter ligações constantes ou variáveis.
Qual é a tupla (x, y)
vinculado ao meu exemplo, e por que não pode ser referenciado novamente?
Respostas:
1 para resposta № 1Do seu orçamento da documentação do Swift:
... pode então ser referenciado em uma cláusula where correspondente e o resto do código dentro do escopo do caso.
Então, no primeiro caso
case let (x,y) where x == y:
print("hello")
greeting
(qual é a tupla (1, 10)
) é comparado com o padronizar
let (x,y) where x == y
e se corresponder x
está ligado ao primeiro elemento da tupla e y
para o segundo.
Esta ligação é restrita ao escopo do primeiro caso, e não pode ser usado no segundo ou em outros casos.
Para fazer seu código compilar, adicione outro let
ligação para o segundo caso:
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")
}