Sobes.tech
Junior — Middle

Hoe wordt de dispatching van methoden die via Extension aan protocollen zijn toegevoegd, geïmplementeerd?

sobes.tech AI

Antwoord van AI

De methoden die via een extensie in Swift-protocollen worden toegevoegd, worden geïmplementeerd met behulp van statische dispatch. Dit betekent dat de aanroep van dergelijke methoden tijdens de compilatiefase wordt bepaald, niet tijdens de uitvoering. In tegenstelling tot methoden die direct in het protocol zijn gedeclareerd (die gebruik maken van dynamische dispatch via de virtuele methodentabel), kunnen methoden uit extensies niet worden overschreven in specifieke typen en worden ze rechtstreeks op het type aangeroepen, dat tijdens de compilatie bekend is.

Bijvoorbeeld, als je een protocol en een extensie met een methode hebt, en vervolgens een type dat dat protocol implementeert, zal de aanroep van de methode uit de extensie altijd de implementatie uit de extensie gebruiken, zelfs als het type een methode met dezelfde naam implementeert. Dit komt doordat extensies geen methoden toevoegen aan de virtuele aanroepentabel van het protocol.

protocol MyProtocol {}

extension MyProtocol {
    func greet() {
        print("Hallo vanuit extensie")
    }
}

struct MyStruct: MyProtocol {
    func greet() {
        print("Hallo vanuit MyStruct")
    }
}

let obj: MyProtocol = MyStruct()
obj.greet() // Zal afdrukken: Hallo vanuit extensie

let obj2 = MyStruct()
obj2.greet() // Zal afdrukken: Hallo vanuit MyStruct

Dus, methoden uit protocolextensies worden statisch aangeroepen, wat belangrijk is om rekening mee te houden bij het ontwerpen van de architectuur.