Henetworkingar de una class Swift en Objective C

Estoy mezclando y haciendo coincidir exitosamente Obj-C y Swift en un proyecto Xcode 7. Sin embargo, no puedo entender cómo, en una class Objective C, henetworkingar de una class Swift (y sí, sé acerca de declarar que la class Swift como @objc para la visibilidad). En este caso, la superclass Swift MySwiftViewController deseada es una subclass de UIViewController . Por ahora, en Obj-C, UIViewController directamente de UIViewController y no UIViewController acceso a las capacidades que agregué en MySwiftViewController .

Esto es lo que entiendo:

– Para declarar que una class Obj-C es henetworkingada de algo, debe estar en el file .h después de ':':

 #import <UIKit/UIKit.h> @interface RootViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> @end 

– Para que las classs Swift sean visibles, es decir #import ed:

 #import "MyProject-Swift.h" 

Sin embargo, no puede importar el encabezado de puente Swift generado automáticamente en el file Obj-C .h . Tampoco puede reenviar-declarar una superclass opaca con @class . Entonces, ¿es posible y cómo?

Desafortunadamente, no es posible subclasificar una class Swift en Objective-C. Directamente de los documentos:

No puedes subclasificar una class Swift en Objective-C.

Consulte la guía de Apple sobre interoperabilidad para get más detalles sobre lo que puede y no puede acceder con Objective-C.

En cuanto a Xcode 8.0 y anteriores, hay una solución sucia-hacky, que probablemente se solucionará en el futuro.

Si desea subclass de un file rápido, puede agregar el atributo objc_subclassing_restricted . Puedes hacerlo como macro por conveniencia. Código:

Clase Swift

 import Foundation class SwiftClass : NSObject { func say() { print("hi"); } } 

Clase Objc:

 #import <Foundation/Foundation.h> #import "test-Swift.h" #define SWIFT_SUBCLASS __attribute__((objc_subclassing_restricted)) SWIFT_SUBCLASS @interface ObjcClass : SwiftClass - (instancetype)init; @end @implementation ObjcClass - (void)say { NSLog(@"oops"); } @end 

Pero, como yo entiendo, no es compatible, y es posible que tenga algún tipo de errores debido a eso. Por lo tanto, no es una guía para la acción, y es más curioso saberlo.