¿Qué mecanismo de despacho se aplica al llamar a un método definido en un protocolo que ha sido ampliado mediante una Extensión?
sobes.tech AI
Respuesta de la IA
En Swift, si un método está definido en un protocolo y luego el protocolo se extiende mediante una extensión con la implementación de ese método, al llamar al método a través de una referencia al protocolo se utiliza la despachación estática (static dispatch). Esto significa que la llamada al método será dirigida a la implementación de la extensión del protocolo, y no a la implementación en un tipo específico, incluso si el tipo la sobrescribe.
En otras palabras, los métodos implementados en extensiones de protocolos no soportan la despachación dinámica (dynamic dispatch), a diferencia de los métodos obligatorios del protocolo implementados en los tipos.
Ejemplo:
protocol MyProtocol {
func requiredMethod()
}
extension MyProtocol {
func requiredMethod() {
print("Implementación predeterminada en la extensión")
}
}
struct MyStruct: MyProtocol {
func requiredMethod() {
print("Implementación en MyStruct")
}
}
let instance: MyProtocol = MyStruct()
instance.requiredMethod() // Imprime "Implementación predeterminada en la extensión"
Esto se debe a que los métodos de las extensiones de protocolos no están en la tabla de llamadas virtuales (vtable) y se llaman directamente.