Üst Türe ve Alt Türe Dönüşümün Temelleri
Üst sınıf ve alt sınıf türleri arasında geçiş yapın.
Üst Türe ve Alt Türe Dönüşümün Temelleri, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 1. 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.
Tür Dönüştürmeye Genel Bakış
Tür dönüştürme, bir örneği sınıf hiyerarşisi içinde farklı bir tür olarak ele almanızı sağlar. Bu işlem veriyi dönüştürmez; statik türü denetler veya değiştirir.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let d = Dog(name: "Rex")
print(d.bark())Bir Sınıf Hiyerarşisi
Dönüştürme için bir hiyerarşi gerekir. Burada Dog ve Cat, Animal türünden türetilmiştir. Bir Dog, Animal türündedir.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let pet: Animal = Dog(name: "Rex")
print(pet.name)as ile Üst Türe Dönüştürme
Üst türe dönüştürme, bir alt sınıf örneğini üst sınıfı olarak ele alır. Bu işlem her zaman başarılı olduğundan yalın as işleci kullanılır.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let dog = Dog(name: "Rex")
let asAnimal = dog as Animal
print(asAnimal.name)Üst Türe Dönüştürme Neden Kullanılır
Üst türe dönüştürme, farklı alt sınıfları birlikte saklamak için kullanışlıdır; örneğin bunları ortak üst sınıf türünde tek bir dizide tutabilirsiniz.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let zoo: [Animal] = [Dog(name: "Rex"), Cat(name: "Mia")]
for a in zoo { print(a.name) }Üst Türe Dönüştürme Her Zaman Güvenlidir
Her alt sınıf örneği aynı zamanda geçerli bir üst sınıf örneği olduğundan derleyici, üst türe dönüştürmeler için as kullanımını başarısızlık riski olmadan kabul eder.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let cat = Cat(name: "Mia")
let animal = cat as Animal
print("Treated as Animal:", animal.name)Üst Türe Dönüştürmeden Sonra Erişimin Kısıtlanması
Üst sınıf türünde saklandıktan sonra yalnızca üst sınıf üyelerini çağırabilirsiniz. Dog'a özgü bark() yöntemi, alt türe dönüştürme yapılana kadar gizli kalır.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
print(a.name)
// a.bark() would not compile hereAlt Türe Dönüştürmeye Giriş
Alt türe dönüştürme bunun tersini yapar: bir üst sınıf başvurusunu belirli bir alt sınıf olarak ele alarak üyelerine yeniden erişmenizi sağlar. Bu işlem başarısız olabilir; bu nedenle as? veya as! gerekir.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
if let dog = a as? Dog {
print(dog.bark())
}Alt Türe Dönüştürme Neden Başarısız Olabilir
Derleyici, belirli bir Animal değerinin gerçekten Dog olduğunu garanti edemez. Değer bir Cat olabilir. Bu belirsizlik nedeniyle alt türe dönüştürmeler denetlenmelidir.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let a: Animal = Cat(name: "Mia")
let maybeDog = a as? Dog
print("Is it a Dog?", maybeDog != nil)Döngüde Alt Türe Dönüştürme
Yaygın bir yaklaşım, üst sınıf türündeki bir dizide yineleme yapmak ve alt sınıfları farklı biçimde ele almak için her öğeyi alt türe dönüştürmektir.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let zoo: [Animal] = [Dog(name: "Rex"), Cat(name: "Mia")]
for a in zoo {
if let dog = a as? Dog { print(dog.bark()) }
if let cat = a as? Cat { print(cat.meow()) }
}Üst Türe ve Alt Türe Dönüştürmenin Özeti
Üst türe dönüştürme (as) temel türe doğru ilerler ve her zaman başarılı olur. Alt türe dönüştürme (as? veya as!) belirli bir türe doğru ilerler ve başarısız olabilir.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let d = Dog(name: "Rex")
let up = d as Animal
let down = up as? Dog
print(up.name, down?.bark() ?? "no")Yalnızca Bir Hiyerarşi İçinde Dönüştürme
Yalnızca aynı hiyerarşi içindeki ilişkili türler arasında dönüştürme yapabilirsiniz. İlişkisiz türler birbirine dönüştürülemez.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
print(a is Animal)
print(a is Dog)Kısa Kontrol
Hangi dönüştürme yönünün her zaman başarılı olduğunu hatırlayın.
Özet: Üst Türe ve Alt Türe Dönüştürme
Dönüştürmenin bir sınıf hiyerarşisi içinde çalıştığını, as ile temel türe doğru yapılan üst türe dönüştürmenin her zaman başarılı olduğunu ve belirli bir alt sınıfa doğru yapılan alt türe dönüştürmenin başarısız olabileceğini öğrendiniz; bu nedenle bir sonraki bölümde tanıtılan denetimli işleçler gerekir.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let pets: [Animal] = [Dog(name: "Rex"), Cat(name: "Mia")]
for p in pets {
if let d = p as? Dog { print(d.bark()) } else { print(p.name) }
}Sıkça Sorulan Sorular
“Üst Türe ve Alt Türe Dönüşümün Temelleri” dersi ücretsiz mi?
Evet — “Üst Türe ve Alt Türe Dönüşümün Temelleri” 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.
“Üst Türe ve Alt Türe Dönüşümün Temelleri” dersinde ne öğreneceğim?
Üst sınıf ve alt sınıf türleri arasında geçiş yapın. 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 1. dersidir.
“Üst Türe ve Alt Türe Dönüşümün Temelleri” 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
- Üst Türe ve Alt Türe Dönüşümün Temelleri
- as? ile Koşullu Tür Dönüşümü
- as! ile Zorunlu Tür Dönüşümü ve Riskleri
- is ile Tür Denetimi