Sobes.tech
Middle

Swift'te uzantılar (extensions) için hangi yönlendirme kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Yöntemlerin genişletmelerde uygulanan çağrı yönetimi, genişletme türüne ve çağrılan yöntemin karakterine bağlıdır:

  • Dinamik Çağrı (Dynamic Dispatch): Protokollerde ve bu protokollere genişletmelerde tanımlanan yöntemler için kullanılır, yönteme protokol tipi değişkeni aracılığıyla çağrıldığında. Ayrıca sınıf genişletmeleri için de geçerlidir.

  • Statik Çağrı (Static Dispatch): Yapı ve enum genişletmelerinde tanımlanan yöntemler için kullanılır. Bu fonksiyon çağrısı derleme zamanında belirlenir.

  • Karma Yöntem (Witness Table): Varsayılan uygulamaya sahip protokol genişletmeleri için. Eğer protokolü karşılayan tip zaten yöntemi uygularsa, onun uygulaması kullanılır (dinamik çağrı). Aksi takdirde, genişletmeden Witness Table aracılığıyla uygulama çağrılır (statik çağrıya benzer, ancak protokoller için).

Örnek:

// Temel tipteki değişken aracılığıyla çağrıldığında sanal çağrı ile sınıf genişletmesi
class BaseClass {
}

extension BaseClass {
    func virtualMethod() {
        print("BaseClass genişletmesi")
    }
}

class DerivedClass: BaseClass {
    // Genişletme yönteminin üzerine yazmak mümkündür, ancak alışılmış değildir
    // override func virtualMethod() { print("DerivedClass genişletmesi") }
}

// Statik çağrı ile yapı genişletmesi
struct MyStruct {
}

extension MyStruct {
    func staticMethod() {
        print("MyStruct genişletmesi")
    }
}

// Protokol genişletmesi
protocol MyProtocol {
    func protocolMethod()
}

extension MyProtocol {
    func protocolMethod() { // Varsayılan uygulama
        print("Varsayılan protokol uygulaması")
    }
}

struct ConformingStruct: MyProtocol {
    // Yorum satırı kaldırılırsa, bu uygulama çağrılır
    // func protocolMethod() { print("ConformingStruct uygulaması") }
}