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ı") }
}