Tengo un proyecto que se inició en Objective-C, y estoy tratando de importar un 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 SO como esta, pero todavía no sirvió: sigo recibiendo el error de archivo no encontrado después de ponerlo #import "NewTestApp-Swift.h"
( NewTestApp
es el nombre del Producto y módulo).
Esto es lo que he hecho hasta ahora:
- En
Define Modules
, seleccionadoYES
para la aplicación. - Se aseguró de que el nombre del módulo del producto no tuviera espacio (consulte la siguiente captura de pantalla)
He intentado usar #import "NewTestApp-Swift.h"
el interior ViewController.m
, ViewController.h
y AppDelegate.m
aunque 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:
~/Library/Developer/Xcode/DerivedData
hizo el truco para mí.Respuestas:
Me encontraba con el mismo problema y no pude hacer que mi proyecto se importara rápidamente en las clases obj-c. Usando Xcode 6, (debería funcionar para Xcode 6+) y pude hacerlo de esta manera ...
@class MySwiftClass;
#import "ProductModuleName-Swift.h"
Enlace a la documentación de Apple al respecto
https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c
fuente
-
carácter, el nombre del archivo de encabezado generado lo convertirá a_
. por ejemplo, si el nombre de su producto esMy-App
, importaríaMy_App-Swift.h
.Objective-C Generated Interface Header Name
, ¡bingo!Si el código Swift está dentro de un Módulo (como en su caso):
Si el código Swift está dentro del proyecto (Swift mixto y ObjC):
En su caso, debe agregar esta línea en el archivo * .m:
IMPORTANTE: mire el "<" en la declaración de importación
https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html
fuente
<NewTestApp-Swift/NewTestApp-Swift.h>
,<NewTestApp/NewTestApp-Swift.h>
y<NewTestApp/ViewController-Swift.h>
todo dentroViewController.m
, pero sigo recibiendo el error "archivo no encontrado", a pesarCleaning
del proyecto cada vez que intento una combinación. He incluido una captura de pantalla en el cuerpo de la pregunta en caso de que ayude.ViewController.m
. Solo he estado intentando importar los encabezados primero para intentar que acepte el código Swift. Voy a mezclar y combinar tanto el código de Objective-C como el de SwiftViewController.m
.Cómo logré importar Swift en Objective-C:
En su ViewController.m, importe el código rápido con:
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 swift existentes en mi proyecto para que funcione: http://nikolakirev.com/blog / using-swift-in-Objective-c-project
fuente
Define Module
yProduct Module Name
?-
en el nombre serán convertidos a guiones_
asíUsando Xcode 8.2.1 y si mira Proyecto > Configuración de compilación> Nombre de encabezado de interfaz generado por Objective-C , allí solo se muestra un archivo de encabezado llamado Producto -Swift.h
Esto significa que en lugar de importar cada módulo por separado del archivo Objective-C .m, utilizando el archivo individual -Swift.h, solo importa 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.
fuente
-Swift.h
archivo de encabezado. Forzarlos a todos (tengo 5 objetivos) a usar un archivo de encabezado común me solucionó el problema.Pasó una hora en este tema, seguir estos pasos lo ayudará a comprender lo que falta:
fuente
Estaba teniendo problemas para importar Swift en un proyecto Objective-C. Al final, busqué en la carpeta de datos derivados para verificar qué generaba Xcode 7. El nombre del archivo era completamente diferente al que esperaba.
Una vez que tuve el nombre de archivo real, lo importé y el proyecto podría compilarse.
fuente
-Swift.h
Xcode debería crearlo automáticamente si el código Swift expone una API a través de@objc
o@objcMembers
[Acerca de]Por lo general, una ubicación se parece a
Puede ser cambiado por
Por defecto el valor es
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
fuente
DEFINE MODULES: YES e importe "ProjectName-Swift.h" en el archivo .m de la clase Obj-C
Esto funcionó para mí para acceder a las clases Swift en Obj-c.
fuente
Había enfrentado el mismo problema con mi equipo cuando estaba trabajando en un proyecto usando 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. Entonces, el compilador no ha reconocido la nueva sintaxis de Swift y no pudo generar la interfaz para la biblioteca de Swift (projectname-swift.h). ¡Comprueba si la versión de Xcode es la última!
fuente
Durante el desarrollo, puede existir la posibilidad de que tenga una clase swift que no esté completamente implementada debido a que puede haber algunos errores de sintaxis. El archivo de encabezado swift estará disponible para usar solo si todos los archivos swift 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
fuente
Importar el archivo de encabezado, es decir
dentro del archivo .h generó un error, indicando:
y la construcción falló.
En su lugar use:
dentro del archivo .m, y aunque aparece el mismo error, la ejecución del proyecto de todos modos suprime el error.
Las clases rápidas están disponibles en el archivo .m.
fuente
Me enfrenté al problema con el nombre del proyecto (objetivo). Incluía el símbolo "-". Entonces la decisión fue la siguiente: si el nombre del proyecto es "Test-App", el nombre de la clase importada es "Test_App-Swift.h"
fuente
Si el nombre de su aplicación tiene algún carácter especial, use _ para caracteres especiales.
Por ejemplo, si el nombre de su aplicación es Nombre "Test App®"
Luego puede importar el archivo swift con "Test_App_-Swift.h".
El espacio y ® se reemplaza por _ mientras está importando.
fuente
Si tiene múltiples objetivos, asegúrese de haber construido todos los marcos
fuente
Xcode 11
Me encontré con este problema cuando construí en Xcode 11. Me tomó un tiempo descubrir qué estaba mal, pero esencialmente, había cambiado la configuración de "Nombre para mostrar" en la pestaña "General" del objetivo en lugar de cambiar directamente en el
Info.plist
archivo a través de Pestaña "Información" en el destino.Esto dio como resultado que Xcode 11.5 pasara por una reescritura / creación de un montón de configuraciones de compilación personalizadas completamente nuevas y modificara el nombre del módulo de la aplicación y el producto .app integrado. En este caso, el nuevo nombre para mostrar también tenía un carácter de barra diagonal (
/
), que en última instancia podría ser la razón por la que no se estaba construyendo (consulte la respuesta de @Silversky Technology ).De todos modos, resolví esto deshaciendo todos los cambios automáticos de Xcode 11.5 en el archivo del proyecto y haciendo manualmente el mismo cambio en el nombre para mostrar del paquete en el
Info.plist
archivo y todo funciona perfectamente.Desearía que te dijera que estaba haciendo cosas como esta antes de que lo haga y sin tu consentimiento.
fuente
Asegúrese de que su clase swift tenga la declaración pública y extienda NSObject:
La importación debería funcionar con comillas, no entre paréntesis, si la clase swift está en el mismo proyecto.
fuente
si agrega un archivo Swift primero, recuerde agregar un archivo Swift a su destino ..., en la columna izquierda
fuente