English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você aprenderá a usar a instrução guardiana para controlar o fluxo de execução do programa.
Instrução If do SwiftDescrição de como executar operações com base em condições específicas (valores booleanos). Neste artigo, vamos aprender os pontos fortes da instrução guardiana em relação à instrução if para controlar o fluxo do programa e escrever código mais simples e limpo.
O principal uso da instrução guardiana é transferir o controle do programa para fora de um escopo em condições específicas. Essas instruções são semelhantes às instruções if que executam ações com base em condições específicas (valores booleanos), mas, diferentemente do if, a instrução guardiana é executada apenas quando algumas condições não forem atendidas.
Além disso, a instrução guardiana deve sair do escopo. Portanto, devemos usar instrução de controle do programa do usuário return, break, continue ou throw no final da instrução guardiana.
expressão guardiana else { //instrução //Obrigatório incluir uma instrução de controle: return, break, continue ou throw. }
Aqui a expressão é uma expressão booleana (que retorna true ou false).
Se o valor da expressão for calculado como false, a instrução guard dentro do bloco de código será executada.
Se o valor da expressão for calculado como true, a instrução guard dentro do bloco de código será pulada da execução.
Atenção: o final da instrução guard deve conter uma instrução de controle return, break, continue ou throw.
Uma instrução guard válida simples é:
guard true else { print("Condição não atendida") } print("Condição atendida")
A saída do programa ao executá-lo é:
Condição atendida
No programa acima, o guard contém um valor booleano true (atendido). Como a instrução guard é executada apenas quando a condição não é atendida, as instruções dentro do guard não são executadas. Isso é o motivo pelo qual print("Condição atendida") é executado e outputado na tela.Condição atendidaa razão.
Agora, altere a condição para false:
guard false else { print("Condição não atendida") } print("Condição atendida")
No programa acima, o resultado da condição de proteção é false. Portanto, deve-se executar a instrução print("Condição não atendida") dentro do else. Mas você receberá uma mensagem de erro:O corpo do 'guard' não pode cair através, considere usar 'return' ou 'throw' para sair do escopo.
A mensagem de erro significa que você precisa usar a instrução return, break, continue ou throw para transferir o controle do programa da instrução guard. Agora usaremos return. Como a instrução return pode ser usada apenas dentro de uma função, encapsularemos o código acima em uma função Swift.
Podemos usar a instrução guard no Swift,Dentro da funçãoAqui está como usar a instrução guard, conforme exemplo:
func someFunction() { guard false else { print("Condição não atendida") return } print("Condição atendida") } someFunction() print("Hello após a chamada da função")
Quando você executar o programa acima, a saída será:
Condição não atendida Hello é outputado após a chamada da função.
No programa acima, o resultado da condição guard é false, portanto, executa-se as instruções dentro do guard. A primeira instrução print("Condição não atendida") é outputada no console.:A condição não é satisfeita.
E a instrução return termina a execução da função, enquanto a instrução print("Hello, after function call") imprime a seguinte linha após a chamada da função no console:A chamada de função depois de imprimir Hello.
emem Swift OptionalsJá vimos o uso de if-Usar let para desempacotar um Optional. Mas também podemos usar a instrução guard em vez de if-Usar let para expandir expressões opcionais, o que tem uma vantagem. Usar guard em vez de if-A principal vantagem de expandir variáveis opcionais com let é que podemos aumentar o escopo de desempacotamento da variável.
Vamos ver isso no exemplo a seguir:
func changeOptionalStringToUpperCase() { var name: String? guard let temp = name else { print("O nome é nil. Não pode ser processado") return } print("Maiúsculo:\(temp.uppercased())") } changeOptionalStringToUpperCase()
Quando você executar o programa acima, a saída será:
O nome é nil. Não pode ser processado
No programa acima, você pode ver que o valor não empacotado temp está sendo usado fora do escopo da instrução guard. Como name foi definido como opcional e contém valor nil, a instrução guard não pode desempacotar esse valor.
Portanto, nas instruções guard else executadas, a mensagem O nome é nil. Não pode ser processado é impressa e a instrução return termina a função. O código equivalente às instruções guard if else é:
func changeOptionalStringToUpperCase() { var name: String? if let temp = name { print("Maiúsculo:\(temp.uppercased())") } print("O nome é nil. Não pode ser processado") return } //Como acessar aqui? Solução: usar Guard } changeOptionalStringToUpperCase()
Atenção, as duas instruções acima são válidas e realizam o mesmo trabalho. No entanto, usar if-ao usar a declaração let, não pode haver if-Usar valores não empacotados (unwrapped) fora da declaração let. No entanto, usando a instrução guard, você pode usar valores não empacotados (unwrapped) dentro de uma função.
A instrução guard pode ligar várias condições, separadas por vírgula (,), conforme mostrado a seguir:
func changeOptionalStringToUpperCase() { var name: String? = "" guard let temp = name, temp.count > 0 else { print("O nome é nil ou uma string vazia. Não pode ser processado") return } print("Maiúsculo:\(temp.uppercased())") } changeOptionalStringToUpperCase()
Quando você executar o programa acima, a saída será:
Nome nil ou string vazia. Não pode ser processado
Na sentença guard acima, há duas condições, separadas por vírgula.
A primeira condição let temp = name desempacota um parâmetro opcional, na nossa instância, essa condição retorna true, a segunda condição temp.count > 0 verifica se a string desempacotada contém mais de 0 caracteres, no nosso exemplo o resultado é false.
Portanto, a sentença dentro da sentença guard executa a sentença print("Nome nil ou string vazia. Não pode ser processado") Seu resultado de saída é Name nil ou uma string vazia. Não pode ser processado no console e a função é encerrada usando a sentença return.