any ve Tür Silme ile Varoluşsal Türler
any Protocol kullanımını, başarım maliyetini ve ne zaman genellerin tercih edilmesi gerektiğini öğrenin.
any ve Tür Silme ile Varoluşsal Türler, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Varoluşsal Tür Nedir?
Varoluşsal bir tür, bir protokole uyan herhangi bir değeri tek tip bir arayüzün arkasında paketler ve bunu çalışma zamanında çözümler.
protocol Drawable { func draw() }
struct Line: Drawable { func draw() { print("Line") } }
let d: any Drawable = Line()
d.draw()any Anahtar Sözcüğü
Swift 5.7, paketlemeyi açık hâle getirmek için varoluşsal türler olarak kullanılan protokol adlarının önünde any anahtar sözcüğünü zorunlu kılar.
func render(_ shape: any Drawable) {
shape.draw()
}
render(Line())Varoluşsal Türlerin Maliyeti
Varoluşsal türler yığın üzerinde bellek ayırır ve dinamik dağıtım kullanır; bu nedenle statik dağıtım kullanan genel türlerden daha yavaş olabilir.
// Existential – dynamic dispatch, potential heap alloc
var shapes: [any Drawable] = [Line(), Line()]
// Generic – static dispatch, no boxing
func drawGeneric<T: Drawable>(_ s: T) { s.draw() }İlişkili Türlü Protokoller ve Varoluşsal Türler Sorunu
İlişkili türler içeren protokoller (PAT'ler), tür silme olmadan çıplak varoluşsal türler olarak kullanılamaz.
protocol Container { associatedtype Item }
// var c: any Container // Swift 5.7 allows with "any" but loses Item infoTür Silme Deseni
Türü silinmiş bir sarmalayıcı, somut bir türü bir yapı arkasında sararak somut türü gizler.
struct AnyDrawable: Drawable {
private let _draw: () -> Void
init<D: Drawable>(_ d: D) { _draw = d.draw }
func draw() { _draw() }
}AnySequence ve AnyPublisher
Swift standart kitaplığı ve Combine, AnySequence ve AnyPublisher gibi türü silinmiş sarmalayıcılar sunar.
import Combine
let subject = PassthroughSubject<Int, Never>()
let pub: AnyPublisher<Int, Never> = subject.eraseToAnyPublisher()eraseToAnyPublisher()
eraseToAnyPublisher(), somut yayıncı zincirini gizler; böylece çağıranlar yalnızca AnyPublisher'a bağımlı olur.
func fetch() -> AnyPublisher<String, Error> {
URLSession.shared.dataTaskPublisher(for: URL(string: "https://example.com")!)
.map { String(data: $0.data, encoding: .utf8) ?? "" }
.eraseToAnyPublisher()
}Varoluşsal Türlerin Uygun Olduğu Durumlar
Türlerin birbirinden farklı olduğu koleksiyonlar için veya derleme zamanında kesin tür bilinmediğinde varoluşsal türleri kullanın.
var widgets: [any Drawable] = [] // mixed concrete types OKVaroluşsal Türler Yerine Genel Türleri Tercih Edin
Mümkün olduğunda, statik dağıtım ve daha iyi performans elde etmek için varoluşsal türleri genel türlerle değiştirin.
// Prefer this:
func draw<T: Drawable>(_ item: T) { item.draw() }
// Over this:
func draw(_ item: any Drawable) { item.draw() }Varoluşsal Türleri Açma
Swift 5.7 ve sonraki sürümleri, bir genel işlev çağrılırken varoluşsal türü otomatik olarak "açabilir" ve temel türü çıkarabilir.
func drawGeneric<T: Drawable>(_ d: T) { d.draw() }
let d: any Drawable = Line()
drawGeneric(d) // compiler opens the existential automaticallyTür Silme ve Opak Türler
Tür silme, türü farklı öğelerle birlikte kullanmak için gizler; opak türler ise tek ve tutarlı bir dönüş türü için tür kimliğini korur.
let erased: any Drawable = Line() // runtime type unknown
let opaque: some Drawable = Line() // compile-time fixed typeKısa Kontrol
Varoluşsal türlerin temel performans maliyeti nedir?
Ders Özeti
Varoluşsal türler (any Protocol), dinamik dağıtım maliyeti karşılığında çalışma zamanında çok biçimlilik sağlar. Tür silme, somut türleri kararlı bir arayüz arkasında sarar. Performans için genel türleri, türleri birbirinden farklı koleksiyonlar için ise varoluşsal türleri tercih edin.
Sıkça Sorulan Sorular
“any ve Tür Silme ile Varoluşsal Türler” dersi ücretsiz mi?
Evet — “any ve Tür Silme ile Varoluşsal Türler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“any ve Tür Silme ile Varoluşsal Türler” dersinde ne öğreneceğim?
any Protocol kullanımını, başarım maliyetini ve ne zaman genellerin tercih edilmesi gerektiğini öğrenin. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“any ve Tür Silme ile Varoluşsal Türler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Genel Kısıtlamalar ve where Koşulları
- some Anahtar Sözcüğüyle Saydam Olmayan Türler
- any ve Tür Silme ile Varoluşsal Türler
- Birincil İlişkili Türler ve Türlendirilmiş Throws