Is Swift good for data structures and algorithms?
Yes. Generics, protocols such as Comparable and Hashable, and optionals make a node whose next may be nil explicit in its type, and the compiler checks every use. Two things are worth knowing early: the standard library is thin, so you write your own queue and heap; and collections are values, so assigning an array to a new variable and changing it leaves the original alone, which surprises people coming from Java or JavaScript.
Which Swift types match which data structures?
Array is a dynamic array and a stack, with append and popLast(); Dictionary and Set are hash tables. That is the whole standard library. Apple's open-source swift-collections package adds Deque, Heap, OrderedSet and OrderedDictionary; the linked list, the tree, the trie and the graph you write yourself, in steps one and two.
Why does a tree node in Swift have to be a class?
Because a struct is a value. It cannot hold a stored property of its own type, even an optional one, and wherever it holds copies, as in an array, changing a copy leaves the original alone. A class instance is a reference, so nodes can point at each other; an indirect enum also works, for trees you never change in place. The catch is ARC: a parent pointer must be weak, or parent and child keep each other alive and the tree is never freed.
How do I write a fast queue in Swift?
Not with removeFirst(): on an Array it shifts every remaining element, so each dequeue is O(n). Keep a head index and advance it, or use two arrays: push onto an inbox, pop from an outbox, and refill the outbox by reversing the inbox when it runs empty. Both make dequeueing amortized O(1). swift-collections' Deque does it for you, and step one has you build a queue yourself.
Which courses on this path are not taught in Swift?
Three: dynamic programming and the Python interview series, taught in Python, and bit manipulation, taught in C++. They are listed after the steps, each with a link that opens it in its own language. A memo in Swift is an array or a Dictionary, and Swift integers carry nonzeroBitCount and trailingZeroBitCount, which do in one property what a C++ bit trick does by hand.
Do I need to know Swift before starting this path?
Structs, classes, optionals, generics and protocols, at least. If those are new, Coddy's Swift course covers them first, free, and this path picks up where it ends.