Introducción
Una entrevista para un puesto de desarrollador iOS/macOS no es solo una prueba de conocimiento de frameworks como UIKit o SwiftUI. En primer lugar, el empleador evalúa tu comprensión del lenguaje Swift: su sintaxis, características de gestión de memoria, trabajo con concurrencia y sistema de tipos. Incluso si escribes aplicaciones con confianza, sin una base teórica es fácil fracasar en una entrevista técnica.
En este artículo hemos recopilado las principales preguntas que se hacen con más frecuencia en las entrevistas de Swift en 2025. Cada pregunta va acompañada de una explicación detallada y un ejemplo de código. El material será útil tanto para juniors como para desarrolladores con experiencia que deseen refrescar sus conocimientos.
1. Tipos Opcionales (Optionals) y seguridad
¿Por qué Swift usa Optionals?
Swift es un lenguaje con tipado estricto, y los tipos opcionales son su característica clave para trabajar de forma segura con nil. A diferencia de Objective-C, donde nil es simplemente un puntero nulo, en Swift Optional es una enumeración (enum) con dos casos: none (nil) y some(Wrapped). Esto obliga al desarrollador a manejar explícitamente la ausencia de un valor, previniendo crashes.
¿Cómo extraer un valor de un Optional?
Hay varias formas:
- Force unwrapping — el operador
!. Se usa solo cuando estás completamente seguro de que el valor no es nil. - Optional binding — la construcción
if letoguard let. - Nil-coalescing operator —
??para asignar un valor por defecto.
var name: String? = "Alice"
// Force unwrapping (peligroso!)print(name!)
// Optional bindingif let unwrappedName = name { print("Hello, \\(unwrappedName)")}
// Nil-coalescinglet displayName = name ?? "Guest"print(displayName)¿Qué son los Implicitly Unwrapped Optionals (IUO)?
Es un tipo opcional que se extrae automáticamente al ser accedido. Se declara con ! después del tipo. Se usa principalmente para propiedades que se inicializan después de init (por ejemplo, IBOutlet en UIKit). Sin embargo, en Swift moderno (5.x), los IUO se comportan como Optionals normales, y el compilador advierte sobre los riesgos.
2. Gestión de memoria: ARC y ciclos de referencias fuertes
¿Cómo funciona ARC en Swift?
Automatic Reference Counting (ARC) es un mecanismo de conteo de referencias. Cada instancia de una clase tiene un contador de referencias. Cuando el contador llega a cero, el objeto se elimina de la memoria. ARC solo funciona con reference types (clases, closures). Los value types (estructuras, enumeraciones) se almacenan en la pila y se gestionan mediante copia.
¿Qué es un ciclo de referencias fuertes (retain cycle)?
Un ciclo ocurre cuando dos objetos se referencian mutuamente a través de referencias fuertes, y ARC no puede liberarlos. Esto provoca una fuga de memoria. La solución es usar referencias débiles (weak) o no poseídas (unowned).
class Person { let name: String var apartment: Apartment? init(name: String) { self.name = name } deinit { print("\\(name) deallocated") }}
class Apartment { let unit: String weak var tenant: Person? // weak — previene el ciclo init(unit: String) { self.unit = unit } deinit { print("Apartment \\(unit) deallocated") }}
var john: Person? = Person(name: "John")var unit4A: Apartment? = Apartment(unit: "4A")
john?.apartment = unit4Aunit4A?.tenant = john
john = nilunit4A = nil// Ambos objetos serán liberados¿Cuándo usar weak y cuándo unowned?
- weak — siempre es optional, se vuelve nil automáticamente cuando el objeto es liberado. Se usa cuando la vida útil de la referencia puede ser más corta que la del propietario.
- unowned — no es optional, asume que el objeto vivirá tanto o más tiempo. Es peligroso: si el objeto es liberado, acceder