ios - tools - xcode ide
ImportaciĆ³n de Project-Swift.h a un archivo Objective-C class... no encontrado (8)
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 docs Apple sobre el uso de Swift y Objective-C en el mismo proyecto, así como una question 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:
- En
Define Modules
, seleccioneYES
para la aplicación. - 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:
Errores que estoy encontrando actualmente:
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 sintaxis. 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 sintaxis en los archivos rápidos y luego intente importar el encabezado rápido en el archivo objetivo c
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 compilar.
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 compilador no ha reconocido la nueva sintaxis Swift y no pudo generar la interfaz para la biblioteca Swift (projectname-swift.h). ¡Comprueba si la versión de Xcode es la última!
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 ...
- Cualquier clase a la que necesite acceder en el archivo .h debe ser una declaración directa como esta
@class MySwiftClass;
- 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
Si el código Swift está dentro de un Módulo (como en su caso):
#import <ProductName/ProductModuleName-Swift.h>
Si el código Swift está dentro del proyecto (mixto Swift y ObjC):
#import <ProductModuleName-Swift.h>
En su caso, debe agregar esta línea en el archivo * .m:
#import <NewTestApp/NewTestApp-Swift.h>
IMPORTANTE: mira el "<" en el extracto de importación
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 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.
Cómo me las arreglé para importar rápidamente en objetivo-c:
- Define el módulo establecido en SÍ (en el proyecto, no en el objetivo)
- Conjunto de nombre de módulo de producto (en el objetivo, 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 objetivo-c (Archivo -> Nuevo -> Swift) y Xcode creará el encabezado de puente de objetivo-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