Swift veri yapıları ve algoritmalar için iyi mi?
Evet. Generic'ler, Comparable ve Hashable gibi protokoller ve optional'lar, next alanı nil olabilen bir düğümü tipinde açıkça gösterir; derleyici de her kullanımı denetler. Erkenden bilmeye değer iki şey var: standart kütüphane incedir, bu yüzden kendi kuyruğunu ve heap'ini yazarsın; koleksiyonlar da değerdir, yani bir diziyi yeni bir değişkene atayıp değiştirmek orijinale dokunmaz, ki bu Java ya da JavaScript'ten gelenleri şaşırtır.
Hangi Swift tipi hangi veri yapısına karşılık gelir?
Array, append ve popLast() ile hem dinamik bir dizi hem de bir stack'tir; Dictionary ve Set hash tablolarıdır. Standart kütüphanenin tamamı bu kadar. Apple'ın açık kaynaklı swift-collections paketi Deque, Heap, OrderedSet ve OrderedDictionary ekler; bağlı listeyi, ağacı, trie'yi ve grafı ise birinci ve ikinci adımlarda kendin yazarsın.
Swift'te bir ağaç düğümü neden sınıf olmak zorunda?
Çünkü struct bir değerdir. Kendi tipinde bir saklanan özellik tutamaz, optional bile olsa; kopyalarının tutulduğu her yerde de, örneğin bir dizide, bir kopyayı değiştirmek orijinale dokunmaz. Bir sınıf örneği ise bir referanstır, bu yüzden düğümler birbirine işaret edebilir; yerinde hiç değiştirmediğin ağaçlar için bir indirect enum da işe yarar. Buradaki tuzak ARC: ebeveyn pointer'ı weak olmalıdır, yoksa ebeveyn ve çocuk birbirini hayatta tutar ve ağaç hiçbir zaman serbest bırakılmaz.
Swift'te hızlı bir kuyruk nasıl yazılır?
removeFirst() ile değil: bir Array üzerinde kalan her elemanı kaydırır, bu yüzden her çıkarma O(n) olur. Bir baş indeksi tutup onu ilerlet ya da iki dizi kullan: giriş dizisine ekle, çıkış dizisinden çıkar; çıkış dizisi boşaldığında onu giriş dizisini ters çevirerek yeniden doldur. İkisi de kuyruktan çıkarmayı amortize O(1) yapar. swift-collections paketindeki Deque bunu senin yerine yapar; birinci adımda da bir kuyruğu kendin kurarsın.
Bu yoldaki hangi kurslar Swift ile anlatılmıyor?
Üç kurs: Python ile anlatılan dinamik programlama ve Python mülakat serisi, C++ ile anlatılan bit işlemleri. Adımlardan sonra listelenirler ve her birinin bağlantısı onu kendi dilinde açar. Swift'te bir memo bir dizi ya da bir Dictionary olur; Swift tam sayılarında nonzeroBitCount ve trailingZeroBitCount özellikleri de vardır, bir C++ bit hilesinin elle yaptığını tek bir özellikte yaparlar.
Bu yola başlamadan önce Swift bilmem gerekiyor mu?
En azından struct'lar, sınıflar, optional'lar, generic'ler ve protokoller. Bunlar sana yeniyse, Coddy'nin Swift kursu önce bunları ücretsiz olarak anlatır ve bu yol onun bittiği yerden devam eder.