Swift → IF, IF Let e Guard Let

Gui Reis
6 min readJun 18, 2022

--

Nesse artigo vou falar sobre os condicionais (tema do artigo) voltado para as variáveis do tipo optional, afinal o IF Let e o Guard Let são usados apenas com opcionals

Caso tenha alguma dúvida sobre o que são optionals, de uma olhada nesse outro artigo que eu fiz que fala sobre eles :)

IF

O if em swift é o tradicional em todas as linguagens, não tem segredo.

Exemplo do if, else if e else em swift

Mas ele também pode ser usado pra verificar se uma determinada variável do tipo opcional possui um valor e não é simplesmente vazia usando uma simples comparação:

OBS: ≠ é equivalente ao != (o print apenas juntou :/)

IF Let

O IF Let se usa com variáveis do tipo opcional necessariamente. É usado quando você vai precisar usar o valor de fato. Ele resume o processo que seria feito assim:

OBS: ≠ é equivalente ao != (o print apenas juntou :/)

OBS: o ?? é chamado de ternário. Caso tenha interesse ou não sabe o que é, vale a pena dar uma pesquisada.

Percebe que ainda sim precisamos passar um valor padrão pra caso a variável seja nil, mesmo entrando na condição (algumNumero ?? 0 onde o 0 seria o valor padrão caso algumNumero for nil).

O IF Let faz exatamente esse processo de verificar se não é nil E ainda cria uma variável pegando o valor do opcional ("tirando" o opcional da variável):

Explicando como funciona o if let; As cores iguais fazem parte de um mesmo grupo.

A condição só vai ser satisfeita quando a variável algumNumero não for nil e ainda salva o valor na variável numero. Em outras palavras, a variável numero só vai ser criada se algumNumero não for nil e vai ser atribuído o valor de algumNumero, que de acordo com o exemplo acima o valor é 5.

O print desse exemplo seria:

Existe um número ➞ 5

Vale ressaltar algumas coisas:

  • A variável só vai ser criada, ou seja, só vai entrar na condição, se não for vazia (nil). Caso seja nil, vai para o caso else(se existir) ou segue com o programa sem entrar no if:
Exemplo usando o IF Let com o else
  • A variável criada é UNICAMENTE acessada dentro do if! Você não consegue acessar a variável fora do if, ela não existe fora da condição, apenas dentro (o que está dentro das chaves {} do if).
Exemplo da variável local criada no if let

Esse é um dos pontos principais que difere do próximo tópico:

Guard Let

A estrutura do guard é usada quando você quer assegurar (acredito que essa seja a tradução mais próxima) que algo exista. Aquilo precisa existir se não o programa encerra.

Vamos supor que você precisa que a variável numeroRecebido não pode de forma alguma ser vazia (nil), ela necessariamente precisa ser um inteiro (Int). Nesse caso usamos o guard

A ideia é bem parecida com o IF Let. Você vai fazer a comparação pra ver se não é nil e salvar em uma variável. O que difere é a condição else, que basicamente vai ser o caso de "o que vai acontecer se for nil", ou seja, quando o programa vai encerrar, já que não queremos que seja nil.

Obs: nesse caso quando se comenta de programa pode ser tanto a função, classe, completionHandler.. Ou até mesmo o programa em si.

Como foi dito, o programa só vai continuar se a variável não for nula. Se for, ele vai entrar no else.

Pontos a serem considerados:

  • A variável numero criada não pode ser acessada dentro do else (exatamente o oposto do IF Let). Mas pode ser acessada logo em seguida (fora do else, no escopo em si)
Exemplo do uso da variável criada no guard let sendo impressa

Quando usar cada um

Ok, já entendi como funciona. Mas quando devo usar o opcional?

Se liga em alguns exemplos:

IF: Se você precisa fazer uma verificação mas não pretende usar a variável opcional (tanto ela no opcional ou o valor dela)

Um exemplo é quando você está lindando com erros. Quando uma função tem o completionHandler ela sempre retorna um erro (do tipo Error):

Exemplo verificando se uma variável possui algum valor ao invés de nil

Nesse exemplo eu estou apenas verificando se existe algum erro, mas (nesse caso) não me interessa qual. Mas se tiver um erro, a função não pode continuar.

OBS IMPORTANTE: tratem os erros, não ignore-os! S2

IF Let

O if let você usa quando precisa usar a variável opcional, mas só por um momento, que não precise usar em todo o escopo:

Ainda usando o mesmo exemplo:

Exemplo da criação de uma variável que recebe o valor do opcional

Nesse exemplo eu quis imprimir o erro que aconteceu, ou seja, eu queria o valor da variável opcional, então salvei ela na variável algumErro e DENTRO da condição (já que lá é o único lugar que eu posso acessar ela) eu printei (mostrei).

Guard Let

O guard let você usa quando NECESSARIAMENTE precisa do valor pra poder fazer alguma tarefa e, se ele não existir (for nil) o processo não pode continuar:

Nesse exemplo vou mostrar usando o ciclo de vida do UIKit. Foi criado uma classe para a minha view (CustomView) e vou definir ela na minha view controller:

Percebe que eu estou garantindo que a variável self.view é do tipo CustomView e, se não for, eu quero que a função encerre ali mesmo, já que não faz sentido continuar.

Boas Práticas

É uma boa prática em swift você criar a variável, que vai receber o valor do opcional caso não for nil, com o mesmo nome da variável opcional (original):

Bônus: Guard (só o guard, sem o let)

O guard no geral é usado pra ASSEGURAR de fato que algo precisa acontecer

Por exemplo: Quando um aplicativo de entrega não consegue entregar no endereço (CEP) da pessoa. Na hora que vai fazer a verificação, coloca um guard pra ver se aquele endereço é possível fazer a entrega:

  • Se for possível: configura a tela com os dados de entrega;
  • Se não for possível: mostra um aviso de que não é possível;

Nesse exemplo, você está evitando de fazer cálculos e mudar a tela para visualizar o pedido, já que nem é possível entregar por que não entrega naquele CEP. Algo parecido com isso:

Outro exemplo é quando o app precisa de internet mas não tem uma comunicação:

--

--