Importación de Project-Swift.h a un archivo Objective-C class … no encontrado

Tengo un proyecto que se inició en Objective-C, y estoy tratando de importar algún código Swift en los mismos archivos de clase en los que he escrito Objective-C anteriormente.

He consultado los documentos de Apple sobre el uso de Swift y Objective-C en el mismo proyecto, así como una pregunta de SO como esta, pero seguí sin resultado: continúo obteniendo el error de archivo no encontrado después de #import "NewTestApp-Swift.h" ( NewTestApp es el nombre del Producto y módulo).

Esto es lo que he hecho hasta ahora:

  1. En Define Modules , seleccione YES para la aplicación.
  2. Se aseguró de que el nombre del Módulo de producto no tuviera espacio (vea la siguiente captura de pantalla)

He intentado usar #import "NewTestApp-Swift.h" dentro de ViewController.m , ViewController.h y AppDelegate.m pero ninguno de ellos ha funcionado.

¿Qué más estoy haciendo incorrectamente? Gracias por tu ayuda.


Captura de pantalla de la configuración:

enter image description here


Errores que estoy encontrando actualmente:

enter image description here

Me encontré con el mismo problema y no pude hacer que mi proyecto se importara rápidamente en clases obj-c. Usando Xcode 6, (debería funcionar para Xcode 6+) y fue capaz de hacerlo de esta manera …

  1. Cualquier clase a la que necesite acceder en el archivo .h debe ser una statement directa como esta

@class MySwiftClass;

  1. SÓLO en el archivo .m, si el código está en el mismo proyecto (módulo), entonces debe importarlo con

#import "ProductModuleName-Swift.h

Enlace a la documentación de la manzana al respecto

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_87

Si el código Swift está dentro de un Módulo (como en su caso):

 #import  

Si el código Swift está dentro del proyecto (mixto Swift y ObjC):

 #import  

En su caso, debe agregar esta línea en el archivo * .m:

 #import  

IMPORTANTE: mira el “<" en el extracto de importación

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

Cómo me las arreglé para importar rápidamente en objective-c:

  • Define el módulo establecido en SÍ (en el proyecto, no en el objective)
  • Conjunto de nombre de módulo de producto (en el objective, no en el proyecto)
  • En su ViewController.m, importe el código rápido con:

     #import "MyProductModuleName-Swift.h" 
  • Agregue un archivo rápido a su proyecto objective-c (Archivo -> Nuevo -> Swift) y Xcode creará el encabezado de puente de objective-c a Swift, pero esto es crucial para hacer que funcione al revés también, aparentemente.

Para la última pieza de este rompecabezas, gracias a Swiftoverload por hacerme consciente de agregar un archivo Swift a través de Xcode GUI y no solo arrastrar y soltar archivos rápidos existentes en mi proyecto para hacerlo funcionar: http://nikolakirev.com/blog / using-swift-in-objective-c-project

Usando Xcode 8.2.1 y si mira Project > Build Settings> Objective-C Generated Interface Header Name , allí solo se muestra un archivo de encabezado con el nombre Product- Swift.h

Esto significa que en lugar de importar cada uno de los módulos por separado del archivo Objective-C .m, utilizando un archivo individual -Swift.h, solo debe importar un Producto -Swift.h que agrega todos los módulos de Swift.

Encontré el mismo problema al buscar la forma tradicional de importar módulos por separado, pero la versión actual de Xcode y Swift 3 lo cambió para usar solo un encabezado para la importación de todos los módulos.

Estaba teniendo problemas para importar Swift a un proyecto de Objective-C. Al final busqué en la carpeta Derivied Data para ver qué estaba generando Xcode 7. El nombre del archivo era completamente diferente al que estaba esperando.

Una vez que tuve el nombre de archivo real lo importé y el proyecto podría comstackr.

Había enfrentado el mismo problema con mi equipo cuando estaba trabajando en un proyecto que usaba git. Un desarrollador no ha actualizado Xcode a la última versión (7.3) que se requería para la última versión de Swift 2.2. Por lo tanto, el comstackdor no ha reconocido la nueva syntax Swift y no pudo generar la interfaz para la biblioteca Swift (projectname-swift.h). ¡Comprueba si la versión de Xcode es la última!

DEFINE MÓDULOS: SÍ e importe “ProjectName-Swift.h” en el archivo .m de la clase Obj-C

Esto funcionó para mí para acceder a las clases de Swift en Obj-c.

Durante el desarrollo, puede haber una posibilidad de que tenga cualquier clase rápida que no esté completamente implementada debido a la cual podría haber algunos errores de syntax. El archivo de encabezado rápido estará disponible para su uso solo si todos los archivos rápidos están libres de errores.

Asegúrese de que no haya errores de syntax en los archivos rápidos y luego intente importar el encabezado rápido en el archivo objective c

Importación del archivo de encabezado, es decir

 #import "-Swift.h" 

dentro del archivo .h generó un error, indicando:

-Swift.h ‘archivo no encontrado

y la comstackción falló.

En su lugar use:

 #import "-Swift.h" 

dentro del archivo .m, y aunque aparece el mismo error, ejecutar el proyecto de todos modos suprime el error.

Las clases rápidas están entonces disponibles dentro del archivo .m.