Swift ist ein Zeiger-Remapping oder eine andere unterstützte Methode zum Swizzeln

Haben Swift-Klassen so etwas wie einen isa-Zeiger, der neu zugeordnet werden kann?

Wir haben diesen Swift gesehenVerwendet eine statischere Methode als Objective-C, das (sofern keine Klassen-Dervices von Foundation / NSObject vorhanden sind) den Swizzling-Stil verhindert, der auf Implementierungen von Remapping-Methoden zur Laufzeit basiert.

Ich frage mich, wie wir methodenabhängige dynamische Funktionen wie das Beobachtermuster, Benachrichtigungen usw. implementieren werden. Gegenwärtig wird all dieses Material von der Objective-C-Ebene bereitgestellt und kann problemlos in Swift integriert werden. Wenn wir diese Funktionen jedoch in einem eigenen Framework (oder einer eigenen App) bereitstellen möchten, müssen Sie sie dann in Objective-C implementieren? Ich würde annehmen, dass es einen Weg gibt, dies "nativ" zu tun.

Eine andere Art von Swizzling, die in Objective-C häufig vorkommt, ist das erneute Zuordnen des isa-Zeigers, um eine Unterklasse im laufenden Betrieb zu generieren. Wird diese Art von Swizzling in Swift unterstützt? Wenn nicht wasist die unterstützte Möglichkeit, beliebige Methodenaufrufe abzufangen?

Bearbeiten: Wie @jatoben betont, muss ab arm64 das isa-remapping durch Aufrufen von object_setClass () und nicht durch direkten Zugriff auf den Wert erfolgen. Dies wird immer noch als "isa pointer swizzling" bezeichnet.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage