/ / O que a ligação constante nas instruções de switch realmente faz? - swift, switch-statement, constantes

O que a ligação constante nas instruções switch realmente faz? - swift, switch-statement, constantes

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 № 1

Do 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")
}