Sobes.tech
Middle

Swift-də genişləndirmələr (extensions) üçün hansı yönləndirmə istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Genişletmələrdə tətbiq olunan metodların çağırış idarəetməsi genişletmə növündən və çağırılan metodun xarakterindən asılıdır:

  • Dinamik çağırış (Dynamic Dispatch): Protokollarda və bu protokollara genişletmələrdə təyin olunan metodlar üçün istifadə olunur, metod protokol tipi dəyişən vasitəsilə çağırıldıqda. Klass genişletmələri üçün də tətbiq edilir.

  • Statik çağırış (Static Dispatch): Struktur və enumerasiya genişletmələrində təyin olunan metodlar üçün istifadə olunur. Belə funksiyaların çağırışı tərtib zamanı müəyyən edilir.

  • Qarışıq çağırış (Witness Table): Varsayılan tətbiqi olan protokol genişletmələri üçün. Əgər protokolu tətbiq edən tip artıq metodun tətbiqini təmin edirsə, bu tətbiq istifadə olunacaq (dinamik çağırış). Əks halda, genişletmədən Witness Table vasitəsilə tətbiq çağırılır (statik çağırışa bənzəyir, amma protokollar üçün).

Nümunə:

// Əsas tipli dəyişən vasitəsilə çağırıldıqda virtual çağırış ilə sinif genişletməsi
class BaseClass {
}

extension BaseClass {
    func virtualMethod() {
        print("BaseClass genişletməsi")
    }
}

class DerivedClass: BaseClass {
    // Genişletmə metodunun üstünü yazmaq mümkündür, amma ümumi deyil
    // override func virtualMethod() { print("DerivedClass genişletməsi") }
}

// Struktur genişletməsi ilə statik çağırış
struct MyStruct {
}

extension MyStruct {
    func staticMethod() {
        print("MyStruct genişletməsi")
    }
}

// Protokol genişletməsi
protocol MyProtocol {
    func protocolMethod()
}

extension MyProtocol {
    func protocolMethod() { // Varsayılan tətbiq
        print("Varsayılan protokol tətbiqi")
    }
}

struct ConformingStruct: MyProtocol {
    // Əgər şərh çıxarılırsa, bu tətbiq çağrılacaq
    // func protocolMethod() { print("ConformingStruct tətbiqi") }
}