Swift es una reasignación de puntero u otro método compatible swizzling

¿Las clases Swift tienen algo así como un puntero isa que se puede reasignar?

Hemos visto que Swiftutiliza un método de envío más estático que el objetivo C, que (a menos que una clase dervices de Foundation / NSObject) evite el estilo de swizzling basado en implementaciones de métodos de reasignación en tiempo de ejecución.

Me pregunto cómo implementaremos características dinámicas basadas en la intercepción de métodos como el patrón de observación, notificaciones, etc. Actualmente, todo esto es proporcionado por la capa Objective-C, y puede integrarse fácilmente en Swift. Pero, si queremos proporcionar este tipo de características en un marco (o aplicación) propio, ¿es necesario implementarlas en Objective-C? Supongo que hay una manera de hacerlo 'nativamente'.

Otro tipo de swizzling común para el objetivo C es reasignar el puntero isa para generar una subclase sobre la marcha. ¿Este tipo de swizzling es compatible con Swift? Si no quees ¿La forma admitida de interceptar invocaciones de métodos arbitrarios?

Editar: Como señala @jatoben, a partir de arm64, la reasignación de isa debe realizarse llamando a object_setClass () y no accediendo al valor directamente. Esto todavía se conoce como 'isa puntero swizzling'