Swift na entrevista: como não passar vergonha
Imagine: você está sentado em frente a um tech lead ou gerente de RH, e de repente surge a pergunta: "Explique a diferença entre classe e estrutura em Swift?". Parece básico. Mas é exatamente nessas perguntas "simples" que muitos candidatos se perdem. E se adicionarmos a isso as armadilhas de ARC, closures e tipos opcionais — a entrevista de Swift pode se transformar em um verdadeiro desafio.
Neste artigo, vamos analisar como se preparar para uma entrevista de Swift para se sentir confiante. Você não terá apenas teoria, mas exemplos reais de código, dicas e um checklist de tópicos para revisar antes da reunião com o empregador.
Por que as entrevistas de Swift são tão específicas?
Swift é uma linguagem jovem, mas muito poderosa. Ela combina gerenciamento de memória de baixo nível (ARC) com abstrações de alto nível (protocolos, genéricos, programação funcional). Na entrevista, você será testado em várias áreas:
- Sintaxe básica — opcionais, enums, tuplas, guard/if-let.
- Gerenciamento de memória — ARC, retain cycles, referências fracas e não proprietárias.
- POO e programação orientada a protocolos — classes vs estruturas, extensões, protocolos.
- Recursos funcionais — closures, map/filter/reduce, async/await.
- Especificidades do iOS — UIKit, ciclo de vida do ViewController, Auto Layout.
A boa notícia: tudo isso pode ser aprendido e treinado. Vamos nessa!
Top 5 tópicos que você precisa saber de cor
1. Estruturas vs Classes: a batalha dos titãs
Esta é, provavelmente, a pergunta mais comum em entrevistas de Swift. Vamos analisar com um exemplo.
// Classe — tipo por referênciaclass Car { var model: String init(model: String) { self.model = model }}
// Estrutura — tipo por valorstruct Bike { var model: String}
var myCar = Car(model: "Tesla")var sameCar = myCarsameCar.model = "BMW"print(myCar.model) // BMW — referência!
var myBike = Bike(model: "Stels")var sameBike = myBikesameBike.model = "Author"print(myBike.model) // Stels — cópia!O que é importante destacar na entrevista:
- Classes suportam herança, estruturas não (mas existem protocolos).
- Estruturas são value types, classes são reference types.
- Estruturas têm automaticamente um memberwise initializer.
- Para concorrência, estruturas são mais seguras — não há estado compartilhado.
2. ARC e gerenciamento de memória — a principal dor do desenvolvedor iOS
Sem entender ARC (Automatic Reference Counting), não há o que fazer em uma entrevista de Swift. O problema mais comum é o retain cycle (referência cíclica).
class ProfileViewController { var onLogout: (() -> Void)? func setup() { // Atenção! Referência forte ao self dentro da closure onLogout = { self.dismiss(animated: true) } }}Como corrigir? Usar [weak self]:
onLogout = { [weak self] in self?.dismiss(animated: true)}Perguntas típicas sobre ARC:
- Qual a diferença entre weak e unowned?
- Quando ocorre um retain cycle?
- Como o ARC funciona com closures?
3. Closures — do simples ao complexo
Closures em Swift são funções anônimas que capturam o contexto. Nenhum callback ou completion handler funciona sem elas.
// Closure simpleslet greeting = { (name: String) in print("Olá, \\(name)!")}greeting("Swift") // Olá, Swift!
// Ordenação de arraylet numbers = [3, 1, 7, 2]let sorted = numbers.sorted { $0 < $1 }print(sorted) // [1, 2, 3, 7]Pergunta complicada: "O que a