as? ile Koşullu Tür Dönüşümü
Başarısızlık durumunda isteğe bağlı değer döndüren bir tür dönüşümünü deneyin.
as? ile Koşullu Tür Dönüşümü, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. 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.
Koşullu Tür Dönüştürme
Koşullu dönüştürme işleci as?, alt türe dönüştürmeyi dener ve bir isteğe bağlı değer döndürür: başarılı olursa değer sarılır, başarısız olursa nil döner.
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")
let maybe = a as? Dog
print(maybe != nil)Sonuç İsteğe Bağlıdır
Dönüştürme başarısız olabileceğinden sonuç türü Dog? olur, Dog olmaz. Kullanmadan önce değeri açmanız 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")
let maybe: Dog? = a as? Dog
print(type(of: maybe))if let ile Değeri Açma
as? kullanmanın yaygın yolu, işlemi bir if let bağlama yapısının içinde gerçekleştirmektir; bu yapı gövdeyi yalnızca dönüştürme başarılı olduğunda çalıştırı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")
if let dog = a as? Dog {
print(dog.bark())
} else {
print("Not a dog")
}Başarısız Dönüştürme nil Döndürür
Örnek hedef türde olmadığında as?, nil üretir ve if let gövdesi atlanı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 = Cat(name: "Mia")
if let dog = a as? Dog {
print(dog.bark())
} else {
print("That is not a dog")
}guard let ile Birleştirme
Dönüştürmeyi erken yapmak ve başarısız olursa çıkmak için guard let de kullanabilirsiniz; böylece başarılı akış girintisiz 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" }
}
func describe(_ a: Animal) {
guard let cat = a as? Cat else {
print("Not a cat")
return
}
print(cat.meow())
}
describe(Cat(name: "Mia"))
describe(Dog(name: "Rex"))Döngülerde Koşullu Dönüştürme
Karışık bir dizide yineleme yapmak ve her öğeyi koşullu olarak dönüştürmek, farklı alt sınıfları güvenle ele almanın temiz bir yoludur.
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"), Dog(name: "Buddy")]
for a in zoo {
if let dog = a as? Dog {
print(dog.bark())
}
}Protokollere Dönüştürme
as? protokole uygunluğu da denetler: örnek protokole uygunsa bir değer, uygun değilse nil döndürür.
protocol Greeter { func greet() -> String }
class Person: Greeter { func greet() -> String { return "Hi" } }
class Rock {}
let items: [Any] = [Person(), Rock()]
for item in items {
if let g = item as? Greeter { print(g.greet()) }
}Dönüştürme Sonrasında nil Birleştirme
Dönüştürme başarısız olduğunda bir yedek değer sağlamak için as? işleciyi ?? işlecinin yanında kullanabilirsiniz.
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 sound = (a as? Dog)?.bark() ?? "unknown sound"
print(sound)İsteğe Bağlı Dönüştürme Çağrılarını Zincirleme
İsteğe bağlı zincirleme, dönüştürme sonucunda bir yöntemi çağırmanızı sağlar; dönüştürme başarısız olursa ifadenin tamamı nil olur.
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")
let bark = (a as? Dog)?.bark()
print(bark as Any)Koşullu Dönüştürme Neden Tercih Edilir
as? hiçbir zaman çökmez; başarısız bir dönüştürme yalnızca nil üretir. Bu nedenle alt türe dönüştürme için güvenli varsayılan seçenektir.
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 unknown: Animal = Cat(name: "Mia")
let result = unknown as? Dog
print("Crashes? No. Value is nil:", result == nil)Koşullu Dönüştürme Özeti Örneği
Hepsini birleştirirsek: bir alt türü güvenle algılayın, üzerinde işlem yapın ve aksi durumda uygun bir yedek davranış uygulayın.
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" }
}
func sound(of a: Animal) -> String {
if let d = a as? Dog { return d.bark() }
if let c = a as? Cat { return c.meow() }
return "silence"
}
print(sound(of: Dog(name: "Rex")))
print(sound(of: Cat(name: "Mia")))Kısa Kontrol
Koşullu dönüştürmenin sonuç türünü hatırlayın.
Özet: as? ile Koşullu Dönüştürme
as? işleminin isteğe bağlı bir değer döndüren güvenli bir alt türe dönüştürme yaptığını, if let ve guard let yapıların başarılı durumu açtığını ve başarısızlığın yalnızca nil ürettiği için işlemin hiçbir zaman çökmediğini öğrendiniz; bu nedenle as? tercih edilen alt türe dönüştürme işlecidir.
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 if let c = p as? Cat { print(c.meow()) }
}Sıkça Sorulan Sorular
“as? ile Koşullu Tür Dönüşümü” dersi ücretsiz mi?
Evet — “as? ile Koşullu Tür Dönüşümü” 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.
“as? ile Koşullu Tür Dönüşümü” dersinde ne öğreneceğim?
Başarısızlık durumunda isteğe bağlı değer döndüren bir tür dönüşümünü deneyin. 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 2. dersidir.
“as? ile Koşullu Tür Dönüşümü” 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