Sobes.tech
Junior — Middle

¿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.