Cómo pasar una entrevista de Swift: preguntas principales
Una entrevista para un puesto de desarrollador iOS no solo evalúa el conocimiento de frameworks, sino también una comprensión profunda del lenguaje Swift. Los empleadores quieren ver un candidato que entienda la gestión de memoria, la concurrencia y las particularidades de la sintaxis. En este artículo hemos recopilado las preguntas principales que suelen hacer en las entrevistas, con respuestas detalladas y ejemplos de código. El artículo será útil tanto para juniors como para desarrolladores experimentados que deseen refrescar conocimientos antes de la entrevista.
1. Fundamentos de Swift: tipos, opcionales y gestión de memoria
Las preguntas básicas verifican qué tan bien comprendes los conceptos fundamentales del lenguaje. Empecemos con el más popular: los opcionales.
Pregunta 1: ¿Qué son los opcionales y para qué sirven?
Respuesta: Los opcionales son un mecanismo de seguridad de tipos que permite que una variable contenga un valor o sea nil (ausencia de valor). Resuelven el problema de los punteros null, común en otros lenguajes.
// Declaración de un opcionalvar name: String? = "Ana"name = nil // ahora la variable no contiene valor
// Extracción segura (optional binding)if let unwrappedName = name { print("Hola, \\(unwrappedName)")} else { print("Nombre ausente")}
// Extracción forzada (force unwrap) — ¡peligroso!// let forcedName = name! // crash si name == nilPregunta 2: ¿Cuál es la diferencia entre struct y class?
Respuesta: struct es un tipo valor (value type), mientras que class es un tipo referencia (reference type). Las estructuras se copian al asignarse, las clases se pasan por referencia. Además, las clases soportan herencia, las estructuras no.
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 // copiapointB.x = 10print(pointA.x) // 1 — el original no cambió
var personA = Person(name: "Iván")var personB = personA // referencia al mismo objetopersonB.name = "Pedro"print(personA.name) // "Pedro" — cambióPregunta 3: ¿Cómo funciona Automatic Reference Counting (ARC)?
Respuesta: ARC cuenta automáticamente la cantidad de referencias fuertes a un objeto de clase. Cuando el contador llega a cero, el objeto se libera de la memoria. Los problemas surgen con referencias cíclicas (retain cycles), que se resuelven usando referencias weak o unowned.
class Parent { var child: Child?}
class Child { weak var parent: Parent? // weak previene retain cycle}
var parent: Parent? = Parent()var child: Child? = Child()parent?.child = childchild?.parent = parent2. Conceptos avanzados: closures, protocolos y genéricos
En la siguiente etapa, el entrevistador verifica si sabes usar las capacidades funcionales de Swift.
Pregunta 4: ¿Qué son los closures y cómo capturan valores?
Respuesta: Un closure es un bloque de código que se puede pasar y usar como una función. Captura (captures) variables del contexto circundante. La captura puede ser fuerte o débil.
func makeIncrementer(incrementAmount: Int) -> () -> Int { var total = 0 let incrementer: () -> Int = { total += incrementAmount // captura total return total } return incrementer}
let incrementByTwo = makeIncrementer(incrementAmount: 2)print(incrementByTwo()) // 2print(incrementByTwo()) // 4Pregunta 5: ¿Cuál es la diferencia entre un protocolo y una clase abstracta?
Respuesta: En Swift no hay clases abstractas. Un protocolo define un contrato (requisitos) que deben implementar clases, estructuras o enu