Cómo aprobar una entrevista de Swift: las mejores preguntas de nivel avanzado

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo aprobar una entrevista de Swift: las mejores preguntas de nivel avanzado



Una entrevista para un puesto de desarrollador iOS no solo evalúa el conocimiento de UIKit y SwiftUI. En un nivel avanzado, los reclutadores y líderes técnicos quieren asegurarse de que entiendes cómo funciona la memoria, en qué se diferencia class de struct en el contexto del conteo de referencias, cómo construir una arquitectura correcta usando protocolos y cómo gestionar la asincronía. En este artículo, analizaremos los temas clave que suelen aparecer en las entrevistas de Swift de nivel Middle y Senior.



1. Gestión de memoria y ARC (Automatic Reference Counting)



ARC es uno de los temas más frecuentes en las entrevistas. No solo necesitas saber la teoría, sino también ser capaz de explicar cómo evitar fugas de memoria.



1.1. ¿Cómo funciona ARC y qué tipos de ciclos de referencias fuertes existen?



ARC cuenta automáticamente el número de referencias fuertes a un objeto de clase. Cuando el contador llega a cero, el objeto se elimina de la memoria. El problema surge cuando dos objetos se referencian fuertemente entre sí, formando un ciclo (retain cycle).



class Parent {    var child: Child?}

class Child { var parent: Parent? // referencia fuerte de vuelta}

var parent: Parent? = Parent()var child: Child? = Child()parent?.child = childchild?.parent = parent// Ambos objetos nunca se liberarán


1.2. ¿Cómo romper el ciclo?



Usa weak o unowned. weak es una referencia opcional que se vuelve nil automáticamente cuando el objeto se elimina. unowned no es opcional, pero asume que el objeto vivirá al menos tanto como el objeto que lo referencia.



class Child {    weak var parent: Parent?  // referencia débil}


1.3. ¿Cómo funciona ARC con closures?



Los closures capturan variables externas. Si un closure se almacena como propiedad de una clase y dentro de él se usa self, se genera un ciclo. La solución es usar [weak self] o [unowned self].



class NetworkManager {    var completionHandler: (() -> Void)?        func fetchData() {        completionHandler = { [weak self] in            guard let self = self else { return }            self.processData()        }    }        func processData() { }}


2. Closures: escaping vs non-escaping



Entender la diferencia entre closures escaping y non-escaping es un requisito obligatorio para cualquier puesto avanzado.



2.1. ¿Qué es un closure escaping?



Un closure se denomina escaping si puede ser llamado después de que la función haya retornado. Por defecto, todos los closures son non-escaping: el compilador sabe que se ejecutarán dentro del cuerpo de la función. Para operaciones asíncronas (por ejemplo, solicitudes de red), es necesario indicar explícitamente @escaping.



func performAsyncTask(completion: @escaping (String) -> Void) {    DispatchQueue.global().async {        // Simulación de una tarea larga        sleep(2)        completion("Listo")    }}


2.2. ¿Por qué los closures non-escaping son más rápidos?



El compilador optimiza los closures non-escaping: puede no copiarlos al heap, sino almacenarlos en la pila. También puede evitar el conteo de referencias, ya que la vida útil del closure está limitada a la llamada de la función.



3. Genéricos y protocolos con tipos asociados (PAT)



Los genéricos son la base de Swift. En una entrevista, pueden pedirte que escribas una estructura genérica o que expliques cómo funcionan los protocolos con tipos asociados.



3.1. Escribe una cola (Queue) genérica



struct Queue<T> {    private var elements: [T] = []        mutating func enqueue(_ value: T) {        elements.append(value)    }        mutating func dequeue() -> T? {        guard !elements.isEmpty else { return nil }                

Blogs

Book Recommendations