Haben Swift-Klassen so etwas wie ein ISA-Zeiger, der neu zugeordnet werden kann?Swift isa Zeiger-Zuordnung oder andere unterstützte Methode Swizzling
Wir haben gesehen, dass Swift uses a more static method dispatch als objective-C, die (sofern nicht eine Klassenherausweise von Foundation/NSObject) den Stil des Swizzling auf der Grundlage von Remapping-Methodenimplementierungen zur Laufzeit verhindert.
Ich frage mich, wie wir Methoden abfangen-basierte dynamische Funktionen wie Beobachter Muster, Benachrichtigungen usw. implementieren? Derzeit wird all dies von der Objective-C-Ebene bereitgestellt und kann problemlos in Swift integriert werden. Aber wenn wir diese Features in einem eigenen Framework (oder App) bereitstellen wollen, müssen wir sie dann in Objective-C implementieren? Ich würde annehmen, dass es einen Weg gibt, es "nativ" zu machen.
Eine andere Art von swizzling, die für objective-C üblich ist, besteht darin, den isa-Zeiger neu zuzuordnen, um eine Unterklasse im laufenden Betrieb zu erzeugen. Wird diese Art Swizzling in Swift unterstützt? Wenn nicht was ist die unterstützte Art des Abfangens beliebiger Methodenaufrufe?
Edit:Als @jatoben weist darauf hin, wie von arm64 isa-Remapping muss direkt durch den Aufruf object_setClass() und nicht durch den Zugriff auf den Wert erfolgen. Dies wird immer noch als "isa Zeiger swizzling"
Es ist nicht sicher, auf isa direkt in Obj-C zuzugreifen, entweder: http://sealiesoftware.com/blog/archive/2013/09/24/objc_explain_Non-pointer_isa.html – jatoben