Uso ambiguo de init en Swift 2.2

Recibo un error de "uso ambiguo de init" cuando compilo con Xcode 7.3 y Swift 2.2

El problema está relacionado con dos classs de Objective-C y cómo Swift ve sus inicializadores.

Objc ve:

Superclass

@interface Foo: NSManagedObject +(instancetype)fooWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context; 

Subclass

 @interface Bar: Foo +(instancetype)barWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context; 

mientras que Swift solo ve:

 init(owner: Owner!, insertIntoManagedObjectContext context: NSManagedObjectContext!) 

que está causando que el comstackdor no esté seguro de qué init está siendo invocado en la subclass "Bar". ¿Hay alguna manera de especificar qué inicializador usar cuando se inicializa la subclass? Me gustaría evitar refactorizar el método init si es posible.

Solutions Collecting From Web of "Uso ambiguo de init en Swift 2.2"

Es debido a ObjC-> Swift API reglas de traducción .

Puede usar el atributo swift_name para sobrescribir estas reglas.

 @interface Foo: NSManagedObject +(instancetype)fooWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context NS_SWIFT_NAME(foo(owner:moc:)); @interface Bar: Foo +(instancetype)barWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context NS_SWIFT_NAME(bar(owner:moc:)); 

Luego puede llamarlos por separado en el código Swift:

 let foo = Bar.foo(owner: owner, moc: context) let bar = Bar.bar(owner: owner, moc: context) 

No estoy seguro de lo que está pasando, por cierto, intenté esto. En el encabezado ObjC, agregué esos dos methods de class:

 + (id)barWithInitializer:(NSString *)className initializer:(SEL)initializer argument:(id)argument; + (id)fooWithInitializer:(NSString *)className initializer:(SEL)initializer argument:(id)argument; 

Luego en la function Swift

Lo he intentado sin problemas ni problemas de interfaz.

 return OBJCObjectFactory.barWithInitializer(className, initializer: initializer, argument: argument) as! TBase? return OBJCObjectFactory.fooWithInitializer(className, initializer: initializer, argument: argument) as! TBase?