0Pricing
Swift Academy · Ders

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

  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