Se a declaração Swift 'guard' deve sair do escopo, qual é a definição de escopo?
Estou confuso sobre a definição de um bloco de código ou de 'escopo'. Os documentos da Apple para guarda dizem o seguinte: o bloco else de uma declaração de guarda ...
"deve transferir o controle para sair do bloco de código no qual a declaração de guarda aparece."
De outrosfontes online digamos que a declaração de guarda deve sair do 'escopo' em que existe.
Então, pegue o código de exemplo abaixo:
func testGuardControlFlow () {
let x = 2
let y = 2
func embededFunc () {
if y == 2 {
guard x == 1 else {
print("oops, number is not 1")
return
}
print ("from in embededFunc")
}
print ("I still want this to print even if x != 1")
}
embededFunc()
print("Great, return still allows this to be printed.")
}
testGuardControlFlow()
De acordo com meu entendimento atual de 'escopo', o código
if y == 2 {....}
cria um novo escopo, ou seja, entre {}. E, dada essa suposição, a guarda simplesmente escaparia desse escopo. Mas esse não é o caso. O protetor nesse caso escapa da função em que é colocado, independentemente de estar enterrado em uma cláusula if.
Estou completamente entendendo mal o que significa 'escopo'? O escopo significa o código contido em um método? Em caso afirmativo, qual é o termo correto para o 'espaço' existente em uma instrução if?