¿Cómo puedo agregar referencias de clases avanzadas utilizadas en el encabezado -Swift.h?

Estoy integrando el código Swift en un gran proyecto Objective-C, pero estoy teniendo problemas cuando mi código Swift se refiere a las clases Objective-C. Por ejemplo, supongamos que tengo:

  1. Una clase Objective-C llamada MyTableViewController
  2. Una clase Objective-C llamada DeletionWorkflow

Decidí una clase Swift de la siguiente manera:

 class DeletionVC: MyTableViewController { let deleteWorkflow: DeletionWorkflow ... } 

Si ahora trato de utilizar esta clase importando ProjectName-Swift.h en el código Objective-C, obtengo errores de símbolo indefinidos tanto para MyTableViewController como para DeletionWorkflow .

Puedo solucionar el problema en ese archivo fuente individual importando DeletionWorkflow.h MyTableViewController.h antes de importar ProjectName-Swift.h pero esto no se ProjectName-Swift.h a un proyecto grande donde quiero que mi Swift y Objective-C interactúen a menudo. .

¿Hay alguna forma de agregar referencias de clase hacia adelante a ProjectName-Swift.h para que estos errores no ocurran cuando trato de usar clases Swift desde el código Objective-C en mi aplicación?

Esto es un poco tonto, pero parece que tu “solución alternativa” es lo que pretendía Apple, al menos por ahora. De la guía de interoperabilidad :

Si usa sus propios tipos de Objective-C en su código Swift, asegúrese de importar los encabezados de Objective-C para esos tipos antes de importar el encabezado generado Swift en el archivo Objective-C .m el que desea acceder al código Swift.

En este hilo de devforums , alguien mencionó que ya presentaron un error en Radar. Probablemente deberías también.

Puede crear otro archivo de encabezado que forward declare o importe las clases necesarias, y luego importe ProjectName-Swift.h . Por ejemplo, cree un archivo llamado ProjectName-Swift-Fixed.h con los contenidos:

 // ProjectName-Swift-Fixed.h // Forward declarations for property classes @class DeletionWorkflow; // Imports for superclasses #import "MyTableViewController.h"; #import "ProjectName-Swift.h" 

Luego, en lugar de #import "ProjectName-Swift.h" en su base de código, use #import "ProjectName-Swift-Fixed.h .