as! ile Zorunlu Tür Dönüşümü ve Riskleri
as! operatörünü yalnızca dönüşümün başarılı olacağı kesin olduğunda kullanın.
as! ile Zorunlu Tür Dönüşümü ve Riskleri, 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.
Zorunlu Tür Dönüştürme
Zorunlu dönüştürme işleci as!, alt türe dönüştürme ve değeri açma işlemlerini tek adımda yapar. Doğrudan isteğe bağlı olmayan türü verir, ancak dönüştürme başarısız olursa çöker.
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 dog = a as! Dog
print(dog.bark())İsteğe Bağlı Değer Sarmalama Yoktur
as? işlecinin aksine, as! sonucunda isteğe bağlı bir değer değil, doğrudan türün kendisi bulunur. Açılacak bir değer yoktur.
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 dog: Dog = a as! Dog
print(type(of: dog))as! Kullanmanın Riski
Örnek aslında hedef türde değilse as!, çalışma zamanında hata oluşturur ve programı durdurur. Kurtarma olanağı yoktur.
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 cat = a as! Cat // would crash at runtime
print("Only force-cast when certain")Zorunlu Dönüştürme Ne Zaman Güvenlidir
as! işlecini yalnızca türden kesinlikle emin olduğunuzda, örneğin hemen önce is ile denetim yaptıysanız kullanı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" }
}
let a: Animal = Dog(name: "Rex")
if a is Dog {
let dog = a as! Dog
print(dog.bark())
}Garanti Sonrasında Zorunlu Dönüştürme
Kodunuzun mantığı türü garanti ediyorsa zorunlu dönüştürme bu kesinliği belgelendirir. Yine de emin olmadığınızda as? işlecini tercih edin.
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 barkIfDog(_ a: Animal) {
guard a is Dog else { return }
let dog = a as! Dog
print(dog.bark())
}
barkIfDog(Dog(name: "Rex"))as? ve as! Karşılaştırması
as? güvenlidir ve isteğe bağlı bir değer döndürür; as! zorlayıcıdır ve başarısız olduğunda çöker. Seçiminizi ne kadar emin olduğunuza göre yapı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" }
}
let a: Animal = Dog(name: "Rex")
let safe = a as? Dog
let forced = a as! Dog
print(safe?.bark() ?? "nil")
print(forced.bark())Koleksiyonları Zorunlu Dönüştürme
array as! [Dog] örneğinde olduğu gibi zorunlu dönüştürmeler tüm koleksiyonlara da uygulanabilir; ancak aynı çökme riski her öğe için geçerlidir.
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 animals: [Animal] = [Dog(name: "Rex"), Dog(name: "Buddy")]
let dogs = animals as! [Dog]
for d in dogs { print(d.bark()) }Tehlikeli Bir Yaklaşım
Yanlış türde bir öğe içeren diziyi zorunlu olarak dönüştürmek çökmeye neden olur. Bu nedenle karışık koleksiyonlarda her öğe için as? kullanılmalıdı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 animals: [Animal] = [Dog(name: "Rex"), Cat(name: "Mia")]
// let dogs = animals as! [Dog] // would crash on the Cat
for a in animals {
if let d = a as? Dog { print(d.bark()) }
}Zorunlu Değer Açma ve Zorunlu Dönüştürme
as! içindeki ! kavramsal olarak isteğe bağlı bir değeri zorunlu olarak açmaya benzer: varsayım yanlışsa kullanışlı ama tehlikelidir.
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 viaOptional = (a as? Dog)!
let viaForce = a as! Dog
print(viaOptional.name, viaForce.name)En İyi Uygulama
Varsayılan olarak as? kullanın. as! işlecini yalnızca başarısızlığın geliştirme sırasında hemen görünür kılmak istediğiniz bir programcı hatasına işaret edeceği durumlarla sınırlayı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 process(_ a: Animal) -> String {
if let d = a as? Dog { return d.bark() }
return "not a dog"
}
print(process(Dog(name: "Rex")))
print(process(Cat(name: "Mia")))Zorunlu Dönüştürme Özeti Örneği
Tür doğrulandığında as! kullanımı temiz görünür. Emin olmadığınızda güvenli koşullu dönüştürme doğru araçtı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 known: Animal = Dog(name: "Rex")
if known is Dog {
print((known as! Dog).bark())
}Kısa Kontrol
Zorunlu dönüştürmenin tehlikesi üzerine düşünün.
Özet: Zorunlu Dönüştürme ve Riskleri
as! işlecinin alt türe dönüştürme yapıp değeri isteğe bağlı olmayan bir türe açtığını, ancak başarısız olduğunda çöktüğünü; yalnızca türden emin olunduğunda, çoğunlukla bir is denetiminden sonra kullanılması gerektiğini ve as? işlecinin daha güvenli varsayılan seçenek olduğunu öğrendiniz.
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 a is Dog { print((a as! Dog).bark()) } else { print("safe skip") }Sıkça Sorulan Sorular
“as! ile Zorunlu Tür Dönüşümü ve Riskleri” dersi ücretsiz mi?
Evet — “as! ile Zorunlu Tür Dönüşümü ve Riskleri” 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 Zorunlu Tür Dönüşümü ve Riskleri” dersinde ne öğreneceğim?
as! operatörünü yalnızca dönüşümün başarılı olacağı kesin olduğunda kullanı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 3. dersidir.
“as! ile Zorunlu Tür Dönüşümü ve Riskleri” 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