¿Es Swift bueno para estructuras de datos y algoritmos?
Sí. Los genéricos, los protocolos como Comparable y Hashable y los opcionales hacen explícito en su tipo un nodo cuyo next puede ser nil, y el compilador comprueba cada uso. Conviene saber pronto dos cosas: la biblioteca estándar es escueta, así que escribes tu propia cola y tu propio heap; y las colecciones son valores, así que asignar un array a una variable nueva y cambiarlo deja intacto el original, algo que sorprende a quien viene de Java o JavaScript.
¿Qué tipos de Swift corresponden a qué estructuras de datos?
Array es un array dinámico y una pila, con append y popLast(); Dictionary y Set son tablas hash. Eso es toda la biblioteca estándar. El paquete de código abierto swift-collections de Apple añade Deque, Heap, OrderedSet y OrderedDictionary; la lista enlazada, el árbol, el trie y el grafo los escribes tú, en los pasos uno y dos.
¿Por qué un nodo de árbol en Swift tiene que ser una clase?
Porque un struct es un valor. No puede tener una propiedad almacenada de su propio tipo, ni siquiera opcional, y allí donde se guardan copias, como en un array, cambiar una copia deja intacto el original. Una instancia de clase es una referencia, así que los nodos pueden apuntarse entre sí; un indirect enum también sirve, para árboles que nunca modificas en el sitio. La trampa es ARC: un puntero al padre debe ser weak, o padre e hijo se mantienen vivos el uno al otro y el árbol nunca se libera.
¿Cómo escribo una cola rápida en Swift?
Con removeFirst(), no: en un Array desplaza todos los elementos restantes, así que cada desencolado es O(n). Guarda un índice de cabeza y avánzalo, o usa dos arrays: inserta en uno de entrada, saca de uno de salida y, cuando el de salida se vacíe, rellénalo invirtiendo el de entrada. Las dos opciones dejan el desencolado en O(1) amortizado. El Deque de swift-collections lo hace por ti, y el paso uno te pide construir una cola tú mismo.
¿Qué cursos de esta ruta no se enseñan en Swift?
Tres: la programación dinámica y la serie de entrevistas en Python, que se enseñan en Python, y la manipulación de bits, que se enseña en C++. Aparecen después de los pasos, cada uno con un enlace que lo abre en su propio lenguaje. En Swift, la memoización se guarda en un array o en un Dictionary, y los enteros de Swift traen nonzeroBitCount y trailingZeroBitCount, que hacen con una sola propiedad lo que un truco de bits de C++ hace a mano.
¿Necesito saber Swift antes de empezar esta ruta?
Como mínimo, structs, clases, opcionales, genéricos y protocolos. Si son nuevos para ti, el curso de Swift de Coddy los cubre primero, gratis, y esta ruta continúa donde él termina.