0Pricing
Swift Academy · Ders

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

  1. Üst Türe ve Alt Türe Dönüşümün Temelleri
  2. as? ile Koşullu Tür Dönüşümü
  3. as! ile Zorunlu Tür Dönüşümü ve Riskleri
  4. is ile Tür Denetimi
← Swift Academy Sayfasına Dön