Como passar na entrevista sobre Swift: principais perguntas e respostas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como passar em uma entrevista de Swift: principais perguntas



A entrevista para a posição de desenvolvedor iOS não é apenas um teste de conhecimento de frameworks, mas também uma compreensão profunda da linguagem Swift. Os empregadores querem ver um candidato que entenda de gerenciamento de memória, concorrência e particularidades da sintaxe. Neste artigo, reunimos as principais perguntas frequentemente feitas em entrevistas, com respostas detalhadas e exemplos de código. O artigo será útil tanto para juniors quanto para desenvolvedores experientes que desejam revisar os conhecimentos antes da entrevista.



1. Fundamentos do Swift: tipos, optionals e gerenciamento de memória



As perguntas básicas verificam o quão bem você entende os conceitos fundamentais da linguagem. Vamos começar com o mais popular — optionals.



Pergunta 1: O que são optionals e para que servem?



Resposta: Optionals são um mecanismo de segurança de tipos que permite que uma variável contenha um valor ou seja nil (ausência de valor). Eles resolvem o problema de ponteiros nulos, comum em outras linguagens.



// Declaração de um optionalvar name: String? = "Ana"name = nil // agora a variável não contém valor

// Extração segura (optional binding)if let unwrappedName = name { print("Olá, \\(unwrappedName)")} else { print("Nome ausente")}

// Extração forçada (force unwrap) — perigoso!// let forcedName = name! // crash se name == nil


Pergunta 2: Qual a diferença entre struct e class?



Resposta: struct é um tipo de valor (value type), enquanto class é um tipo de referência (reference type). Structs são copiadas na atribuição, classes são passadas por referência. Além disso, classes suportam herança, mas structs não.



struct Point {    var x: Int    var y: Int}

class Person { var name: String init(name: String) { self.name = name }}

var pointA = Point(x: 1, y: 2)var pointB = pointA // cópiapointB.x = 10print(pointA.x) // 1 — o original não mudou

var personA = Person(name: "João")var personB = personA // referência ao mesmo objetopersonB.name = "Pedro"print(personA.name) // "Pedro" — mudou


Pergunta 3: Como funciona o Automatic Reference Counting (ARC)?



Resposta: O ARC conta automaticamente o número de referências fortes para um objeto de classe. Quando o contador chega a zero, o objeto é liberado da memória. Problemas surgem com referências cíclicas (retain cycles), que são resolvidas usando referências weak ou unowned.



class Parent {    var child: Child?}

class Child { weak var parent: Parent? // weak previne retain cycle}

var parent: Parent? = Parent()var child: Child? = Child()parent?.child = childchild?.parent = parent


2. Conceitos avançados: closures, protocolos e generics



Na próxima etapa, o entrevistador verifica se você sabe usar os recursos funcionais do Swift.



Pergunta 4: O que são closures e como elas capturam valores?



Resposta: Uma closure é um bloco de código que pode ser passado e usado como uma função. Ela captura (captures) variáveis do contexto ao redor. A captura pode ser forte ou fraca.



func makeIncrementer(incrementAmount: Int) -> () -> Int {    var total = 0    let incrementer: () -> Int = {        total += incrementAmount // captura de total        return total    }    return incrementer}

let incrementByTwo = makeIncrementer(incrementAmount: 2)print(incrementByTwo()) // 2print(incrementByTwo()) // 4


Pergunta 5: Qual a diferença entre um protocolo e uma classe abstrata?



Resposta: Em Swift não existem classes abstratas. Um protocolo define um contrato (requisitos) que deve ser implementado por classes, structs ou enums.

Blogs

Book Recommendations