Sobes.tech
Junior — Middle

Comment la dispatching des méthodes ajoutées via Extension dans les protocoles est-elle implémentée?

sobes.tech IA

Réponse de l'IA

Les méthodes ajoutées via une extension dans les protocoles Swift sont implémentées à l'aide d'une dispatch statique. Cela signifie que l'appel de ces méthodes est déterminé lors de la compilation, et non à l'exécution. Contrairement aux méthodes déclarées directement dans le protocole (qui utilisent une dispatch dynamique via la table des méthodes virtuelles), les méthodes d'extension ne peuvent pas être redéfinies dans des types spécifiques et sont appelées directement par type, connu lors de la compilation.

Par exemple, si vous avez un protocole et une extension avec une méthode, puis un type qui implémente ce protocole, l'appel à la méthode de l'extension utilisera toujours l'implémentation de l'extension, même si le type implémente une méthode avec le même nom. Cela est dû au fait que les extensions n'ajoutent pas de méthodes à la table des appels virtuels du protocole.

protocol MyProtocol {}

extension MyProtocol {
    func greet() {
        print("Bonjour de l'extension")
    }
}

struct MyStruct: MyProtocol {
    func greet() {
        print("Bonjour de MyStruct")
    }
}

let obj: MyProtocol = MyStruct()
obj.greet() // Affichera : Bonjour de l'extension

let obj2 = MyStruct()
obj2.greet() // Affichera : Bonjour de MyStruct

Ainsi, les méthodes des extensions de protocoles sont appelées de manière statique, ce qui est important à prendre en compte lors de la conception de l'architecture.