Wie wird die Dispatching von Methoden, die über Extension in Protokollen hinzugefügt wurden, implementiert?
sobes.tech KI
Antwort von AI
Methoden, die über eine Extension in Swift-Protokollen hinzugefügt werden, werden mit statischer Dispatch implementiert. Das bedeutet, dass der Aufruf solcher Methoden zur Compile-Zeit bestimmt wird und nicht zur Laufzeit. Im Gegensatz zu Methoden, die direkt im Protokoll deklariert sind (die eine dynamische Dispatch über die virtuelle Methodentabelle verwenden), können Methoden aus Extensions in bestimmten Typen nicht überschrieben werden und werden direkt nach Typ, der zur Compile-Zeit bekannt ist, aufgerufen.
Zum Beispiel, wenn du ein Protokoll und eine Extension mit einer Methode hast, und dann einen Typ, der dieses Protokoll implementiert, wird der Methodenaufruf aus der Extension immer die Implementierung aus der Extension verwenden, selbst wenn der Typ eine Methode mit demselben Namen implementiert. Das liegt daran, dass Extensions keine Methoden in die virtuelle Tabelle des Protokolls hinzufügen.
protocol MyProtocol {}
extension MyProtocol {
func greet() {
print("Hallo von der Extension")
}
}
struct MyStruct: MyProtocol {
func greet() {
print("Hallo von MyStruct")
}
}
let obj: MyProtocol = MyStruct()
obj.greet() // Gibt aus: Hallo von der Extension
let obj2 = MyStruct()
obj2.greet() // Gibt aus: Hallo von MyStruct
Daher werden Methoden aus Protocol-Extensions statisch aufgerufen, was bei der Architekturplanung zu berücksichtigen ist.