Perguntas para se preparar [pt-br]
Tags: ios, mobile
Published: 2022-07-31 18:44:00



**1. O que é um Completion Handler?**

Um **Completion Handler** no Swift é uma função que chama de volta quando uma tarefa é concluída. Por isso também é chamado de função de retorno de chamada.
Uma função de retorno de chamada é passada como um argumento para outra função. Quando esta função conclui a execução de uma tarefa, ela executa a função de retorno de chamada.

**2 . O que é Typealias?**

Um **Typealias** permite que você forneça um novo nome para um tipo de dados existente em seu programa. Depois que um alias de tipo é declarado, o nome do alias pode ser usado em vez do tipo existente em todo o programa.

**3. O que é defer keyword?**

A palavra chave **defer** do Swift nos permite configurar algum trabalho a ser realizado quando o escopo atual sair.

**4 . Qual a diferença entra Any e AnyObject?**

- **Any** pode representar uma instância de qualquer tipo, incluindo tipos de função, tanto para o tipo de referência quanto para o tipo de valor.
 
- **AnyObject** pode representar uma instância de qualquer tipo de classe, apenas para o tipo de referência.

**5. O que é o método [subscript](https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html)?**

Um **subscript** define um atalho para elementos de uma coleção, lista ou sequência. Pode ser definido em classes, estruturas, e enumerações para permitir acesso rápido a elementos de um determinado tipo.

**6 .O que é a inicialização Member Wise na Struct?**

Um inicializador **memberwise** é um inicializador que é gerado automaticamente pelo compilador para estruturas que não definem um
inicializador personalizado em sua declaração.

**7. Qual a diferença entre Frame e Bounds?**

- Os **Bounds** de uma UIView é o retângulo, expresso como um local (x, y) e tamanho (largura, altura) em relação ao seu próprio
sistema de coordenadas (0, 0).

- O **Frame** de uma UIView é o retângulo, expresso como um local (x, y) e tamanho (largura, altura) em relação à superview em que está contido.

**8 . Qual a diferença entre [Upcast](https://blog.logrocket.com/type-casting-in-swift/) e [Downcast](https://blog.logrocket.com/type-casting-in-swift/)?**

A principal diferença entre **Upcast** e **Downcast** no Swift é que o upcasting de uma classe derivada para uma base pode ser verificado em tempo de compilação e nunca deixará de compilar e o Downcasts, por outro lado, pode falhar em compilar, já que a classe precisa nem sempre é conhecida. É possível que o UIView que você tem seja um UITableView ou um UIButton.


**9 . Qual a diferença entre == e ===?**

**==** operador verifica se seus valores de instância são iguais, "iguais a"

**===** operador verifica se as referências apontam para a mesma instância, "Idêntica a",(Mesma Referência)

**10 . O que a keyword mutating faz em Swift?**

As strcuts são imutáveis. O que significa que outras variáveis não podem alterar os valores da estrutura em nenhum ponto.

A keyword **mutating** é necessária para alterar os valores das variáveis próprias SOMENTE dentro da função da estrutura

**11 . Como sair de múltiplos níveis de loop?**

Ao adicionar um rótulo ao loop externo, podemos sair de ambos os loops de uma só vez, exemplo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ztn8j5dloqesmt5tz81.png)
 
**12 . O que sao parámetros [inout](https://www.hackingwithswift.com/sixty/5/10/inout-parameters)?**

Todos os parâmetros passados para uma função Swift são constantes, então você não pode alterá-los. Se quiser, você pode passar um ou mais parâmetros como **inout**, o que significa que eles podem ser alterados dentro da sua função, e essas alterações refletem no valor original fora da função.

**13 . Qual a diferença entre as?,as! e as no Swift?**

**as** só pode ser usado para upcasting.

O operador de cast condicional **as?** Tenta realizar uma conversão, mas retorna nil se não puder. seu resultado é opcional. 

O operador **as!** é para conversão forçada de tipo.

**14 . Qual a diferença entre Self vs self?**

Self - use em declarações de protocolo e extensão para se referir ao tipo eventual que estará em conformidade com o protocolo. 
self (Minúsculo) - referência explícita ao tipo ou instância atual do tipo em que ocorre

**14 . Qual a diferença entre protocol e class em Swift?**

**Class** define o que é um objeto.

O **protocol** define um comportamento que o objeto tem.

**15 . Quando usar set em vez de um array em Swift?**

**Sets** são especialmente úteis quando você precisa garantir que um item apareça apenas uma vez no conjunto, mas não em ordem.

O **Array** é em ordem mas pode ser itens duplicados.

**16 . Qual a diferença entre fileprivate and private?**

**file private** pode ser lido em qualquer lugar do mesmo arquivo que foi declarado mesmo fora do tipo.

**private** só pode ser lida dentro do tipo que a declarou ou dentro de extensões para esse tipo que foram criadas no mesmo arquivo.

**16 . Existe alguma maneira de criar class abstrata em Swift?**

Por extensões de Protocolo e Protocolo, você pode obter o mesmo comportamento.

Primeiro, você escreve um protocolo que atua como uma interface para todos os métodos que precisam ser implementados em todos os tipos que estejam em conformidade com ele. Então você pode adicionar comportamento padrão a todos os tipos que estão em conformidade com ele

Agora você pode criar novos tipos implementando o protocolo.

<br><br>
**Continua...**

---



Header Image: Photo by <a href="https://unsplash.com/@hadijasaidi?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Hadija Saidi</a> on <a href="https://unsplash.com/s/photos/questions?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>