Quel mécanisme de dispatch est utilisé lors de l'appel d'une méthode définie dans un protocole qui a été étendu à l'aide d'une Extension?
sobes.tech IA
Réponse de l'IA
En Swift, si une méthode est définie dans un protocole, puis que le protocole est étendu via une extension avec l’implémentation de cette méthode, l’appel de la méthode via une référence au protocole utilise la dispatch statique (static dispatch). Cela signifie que l’appel de la méthode sera dirigé vers l’implémentation de l’extension du protocole, et non vers l’implémentation dans un type spécifique, même si ce dernier la redéfinit.
En d’autres termes, les méthodes implémentées dans des extensions de protocoles ne supportent pas la dispatch dynamique (dynamic dispatch), contrairement aux méthodes obligatoires du protocole implémentées dans les types.
Exemple :
protocol MyProtocol {
func requiredMethod()
}
extension MyProtocol {
func requiredMethod() {
print("Implémentation par défaut dans l’extension")
}
}
struct MyStruct: MyProtocol {
func requiredMethod() {
print("Implémentation dans MyStruct")
}
}
let instance: MyProtocol = MyStruct()
instance.requiredMethod() // Affiche "Implémentation par défaut dans l’extension"
Cela est dû au fait que les méthodes des extensions de protocoles ne figurent pas dans la table d’appels virtuels (vtable) et sont appelées directement.