Sobes.tech
Junior — Middle

Welke dispatch-mechanisme wordt toegepast bij het aanroepen van een methode die in een protocol is gedefinieerd en die is uitgebreid met een Extension?

sobes.tech AI

Antwoord van AI

In Swift, als een methode is gedefinieerd in een protocol en vervolgens het protocol wordt uitgebreid via een Extension met de implementatie van die methode, wordt bij het aanroepen van de methode via een referentie naar het protocol de statische dispatch (static dispatch) gebruikt. Dit betekent dat de methode-aanroep wordt gericht op de implementatie uit de protocoluitbreiding, en niet op de implementatie in een specifiek type, zelfs als dat type deze overschrijft.

Met andere woorden, methoden die in protocoluitbreidingen zijn geïmplementeerd, ondersteunen geen dynamische dispatch (dynamic dispatch), in tegenstelling tot de verplichte methoden van het protocol die in de types zijn geïmplementeerd.

Voorbeeld:

protocol MyProtocol {
    func requiredMethod()
}

extension MyProtocol {
    func requiredMethod() {
        print("Standaard implementatie in extensie")
    }
}

struct MyStruct: MyProtocol {
    func requiredMethod() {
        print("Implementatie in MyStruct")
    }
}

let instance: MyProtocol = MyStruct()
instance.requiredMethod() // Drukt "Standaard implementatie in extensie" af

Dit komt doordat de methoden uit protocoluitbreidingen niet in de virtuele aanroepstabel (vtable) staan en direct worden aangeroepen.