ObjC <-> Puente rápido y métodos de fábrica
Tengo alguna clase de Objective-C que quiero usar de Swift. Por razones que están más allá del alcance de esta pregunta, mi claseinit
l método @ está marcado como no disponible. En cambio, hay un método de fábrica. Esta es una simplificación de cómo se ve mi clase:
@interface MyClass : NSObject
+ (instancetype)myClass;
- (instancetype)init NS_UNAVAILABLE;
@end
Cuando lo uso de Swift, puedo hacerlet x = MyClass()
y esto está bien porque, de acuerdo con las reglas de puente, el compilador intenta asignar métodos de fábrica a inicializadores normales. El problema es que el "no disponible"init
e invoca el método @ en lugar del método de fábrica.
¿Cómo hago que Swift use el método de fábrica?
Experimentos adicionales:
Estoy seguroNS_UNAVAILABLE
funciona, porque si lo hago:
@interface MyClass : NSObject
- (instancetype)init NS_UNAVAILABLE;
@end
uego, en el lado de Swift, obtengo el esperado'init()' is unavailable
mensaje de error
Esto significa que es el método de fábrica que permitelet x = MyClass()
para compilar, pero en tiempo de ejecución se llama al método "incorrecto".