Swift é bom para estruturas de dados e algoritmos?
Sim. Generics, protocolos como Comparable e Hashable e optionals deixam explícito no tipo um nó cujo next pode ser nil, e o compilador confere cada uso. Vale saber duas coisas cedo: a biblioteca padrão é enxuta, então você escreve a sua própria fila e o seu próprio heap; e as coleções são valores, então atribuir um array a uma nova variável e alterá-lo deixa o original intacto, o que surpreende quem vem de Java ou JavaScript.
Quais tipos do Swift correspondem a quais estruturas de dados?
Array é um array dinâmico e uma pilha, com append e popLast(); Dictionary e Set são tabelas hash. Essa é a biblioteca padrão inteira. O pacote open source swift-collections da Apple acrescenta Deque, Heap, OrderedSet e OrderedDictionary; a lista ligada, a árvore, a trie e o grafo você mesmo escreve, nos passos um e dois.
Por que um nó de árvore em Swift precisa ser uma classe?
Porque uma struct é um valor. Ela não pode ter uma propriedade armazenada do próprio tipo, nem mesmo uma opcional, e onde quer que existam cópias dela, como em um array, alterar uma cópia deixa o original intacto. Uma instância de classe é uma referência, então os nós podem apontar uns para os outros; um indirect enum também funciona, para árvores que você nunca altera depois de construídas. O porém é o ARC: um ponteiro para o pai precisa ser weak, senão pai e filho mantêm um ao outro vivos e a árvore nunca é liberada.
Como escrever uma fila rápida em Swift?
Não com removeFirst(): em um Array, ele desloca todos os elementos restantes, então cada remoção da fila é O(n). Mantenha um índice para a cabeça e avance-o, ou use dois arrays: insira em um de entrada, retire de um de saída e, quando o de saída esvaziar, reabasteça-o invertendo o de entrada. As duas formas deixam a remoção em O(1) amortizado. O Deque do swift-collections faz isso por você, e no passo um você constrói uma fila por conta própria.
Quais cursos desta trilha não são ensinados em Swift?
Três: programação dinâmica e a série de entrevistas em Python, ensinadas em Python, e manipulação de bits, ensinada em C++. Eles aparecem listados depois dos passos, cada um com um link que o abre na própria linguagem. Uma tabela de memoização em Swift é um array ou um Dictionary, e os inteiros do Swift trazem nonzeroBitCount e trailingZeroBitCount, que fazem em uma propriedade o que um truque com bits em C++ faz à mão.
Preciso saber Swift antes de começar esta trilha?
Structs, classes, optionals, generics e protocolos, no mínimo. Se isso for novidade, o curso de Swift da Coddy cobre esses temas primeiro, de graça, e esta trilha continua de onde ele termina.