Swift est-il adapté aux structures de données et aux algorithmes ?
Oui. Les génériques, les protocoles comme Comparable et Hashable, et les optionnels rendent explicite dans son type un nœud dont le next peut être nil, et le compilateur vérifie chaque utilisation. Deux points sont à connaître tôt : la bibliothèque standard est mince, donc tu écris toi-même ta file et ton tas ; et les collections sont des valeurs, donc affecter un tableau à une nouvelle variable puis le modifier laisse l'original intact, ce qui surprend les gens qui viennent de Java ou de JavaScript.
Quels types Swift correspondent à quelles structures de données ?
Array est un tableau dynamique et une pile, avec append et popLast() ; Dictionary et Set sont des tables de hachage. C'est toute la bibliothèque standard. Le package open source d'Apple swift-collections ajoute Deque, Heap, OrderedSet et OrderedDictionary ; la liste chaînée, l'arbre, le trie et le graphe, tu les écris toi-même, aux étapes un et deux.
Pourquoi un nœud d'arbre doit-il être une classe en Swift ?
Parce qu'une struct est une valeur. Elle ne peut pas contenir de propriété stockée de son propre type, même optionnelle, et partout où l'on en garde des copies, comme dans un tableau, modifier une copie laisse l'original intact. Une instance de classe est une référence, donc les nœuds peuvent pointer les uns vers les autres ; un indirect enum fonctionne aussi, pour les arbres que tu ne modifies jamais sur place. Le piège, c'est ARC : un pointeur vers le parent doit être weak, sinon parent et enfant se maintiennent mutuellement en vie et l'arbre n'est jamais libéré.
Comment écrire une file rapide en Swift ?
Pas avec removeFirst() : sur un Array, cette méthode décale tous les éléments restants, donc chaque retrait est en O(n). Garde un indice de tête et fais-le avancer, ou utilise deux tableaux : ajoute dans un tableau d'entrée, retire d'un tableau de sortie, et quand ce dernier est vide, remplis-le en inversant le tableau d'entrée. Les deux rendent le retrait en O(1) amorti. Le Deque de swift-collections le fait pour toi, et l'étape un te fait construire une file toi-même.
Quels cours de ce parcours ne sont pas enseignés en Swift ?
Trois : la programmation dynamique et la série d'entretiens en Python, enseignées en Python, et la manipulation de bits, enseignée en C++. Ces trois cours figurent après les étapes, chacun avec un lien qui l'ouvre dans son propre langage. En Swift, une table de mémoïsation est un tableau ou un Dictionary, et les entiers Swift ont nonzeroBitCount et trailingZeroBitCount, qui font en une propriété ce qu'une astuce C++ sur les bits fait à la main.
Faut-il connaître Swift avant de commencer ce parcours ?
Au minimum les structs, les classes, les optionnels, les génériques et les protocoles. Si c'est nouveau pour toi, le cours Swift de Coddy les couvre d'abord, gratuitement, et ce parcours prend le relais là où il s'arrête.