Czy Swift nadaje się do nauki algorytmów i struktur danych?
Tak. Typy generyczne, protokoły takie jak Comparable i Hashable oraz opcjonale sprawiają, że węzeł, którego next może być nil, ma to zapisane w typie, a kompilator sprawdza każde użycie. Warto wcześnie wiedzieć dwie rzeczy: biblioteka standardowa jest skromna, więc własną kolejkę i kopiec piszesz samodzielnie, a kolekcje są wartościami, więc przypisanie tablicy do nowej zmiennej i jej zmiana nie ruszają oryginału, co zaskakuje osoby przychodzące z Javy czy JavaScriptu.
Które typy Swifta odpowiadają którym strukturom danych?
Array to tablica dynamiczna i stos, z append i popLast(). Dictionary i Set to tablice mieszające. To cała biblioteka standardowa. Otwartoźródłowy pakiet Apple swift-collections dodaje Deque, Heap, OrderedSet i OrderedDictionary. Listę wiązaną, drzewo, drzewo trie i graf piszesz samodzielnie, w krokach pierwszym i drugim.
Dlaczego węzeł drzewa w Swift musi być klasą?
Bo struktura jest wartością. Nie może mieć przechowywanej właściwości własnego typu, nawet opcjonalnej, a tam, gdzie przechowuje kopie, jak w tablicy, zmiana kopii nie rusza oryginału. Instancja klasy jest referencją, więc węzły mogą wskazywać na siebie nawzajem. indirect enum też działa, w przypadku drzew, których nigdy nie zmieniasz w miejscu. Haczykiem jest ARC: wskaźnik do rodzica musi być weak, bo inaczej rodzic i dziecko utrzymują się nawzajem przy życiu, a drzewo nigdy nie zostaje zwolnione.
Jak napisać szybką kolejkę w Swift?
Nie przez removeFirst(): na Array przesuwa ono każdy pozostały element, więc każde zdjęcie z kolejki to O(n). Trzymaj indeks początku i go przesuwaj albo użyj dwóch tablic: wkładaj do skrzynki wejściowej, zdejmuj z wyjściowej, a gdy wyjściowa się opróżni, napełnij ją odwróconą wejściową. Oba sposoby dają zdejmowanie w zamortyzowanym czasie O(1). Deque z swift-collections robi to za ciebie, a w kroku pierwszym samodzielnie budujesz kolejkę.
Które kursy z tej ścieżki nie są prowadzone w Swift?
Trzy: programowanie dynamiczne i seria rekrutacyjna w Pythonie, prowadzone w Pythonie, oraz operacje na bitach, prowadzone w C++. Są wymienione po krokach, każdy z linkiem, który otwiera go w jego własnym języku. Memoizacja w Swift to tablica albo Dictionary, a liczby całkowite w Swift mają nonzeroBitCount i trailingZeroBitCount, które jedną właściwością robią to, co sztuczka bitowa w C++ robi ręcznie.
Czy muszę znać Swifta, zanim zacznę tę ścieżkę?
Przynajmniej struktury, klasy, opcjonale, typy generyczne i protokoły. Jeśli to dla ciebie nowość, kurs Swifta w Coddy omawia je najpierw, za darmo, a ta ścieżka zaczyna się tam, gdzie on się kończy.