Escribí una biblioteca en Swift y no pude importarla a mi proyecto actual, escrito en Objective-C.
¿Hay alguna forma de importarlo?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
objective-c
import
swift
Viktor Radchenko
fuente
fuente
Respuestas:
Necesitas importar
TargetName-Swift.h
. Tenga en cuenta que es el nombre del objetivo: las otras respuestas cometen el error de usar el nombre de la clase.Este archivo único es un encabezado autogenerado que define las interfaces Objective-C para todas las clases de Swift en su proyecto que se anotan
@objc
o heredan deNSObject
.Consideraciones:
Si su nombre de destino contiene espacios, reemplácelos con guiones bajos (por ejemplo, se
My Project
convierte enMy_Project-Swift.h
)Si su objetivo es un marco, debe importar
<TargetName/TargetName-Swift.h>
Asegúrese de que su archivo Swift sea miembro del objetivo
fuente
Instrucciones del sitio web de Apple:
Revisión:
Solo puede importar "ProductName-Swift.h" en archivos .m.
fuente
NSObject
!!! no puedes simplemente declarar unclass Blah
en rápido y hacer que funcione. necesita serclass Blah : NSObject
Esto es lo que debes hacer:
Crear un nuevo proyecto en Objective-C
Crea un nuevo
.swift
archivoHaga clic en su archivo de proyecto Xcode
Haga clic en Configuración de compilación
Busque la barra de búsqueda y busque el módulo Define .
Cambie el valor a Sí .
Buscar nombre del módulo del producto .
Cambie el valor al nombre de su proyecto.
En la aplicación delegada, agregue lo siguiente:
#import "YourProjectName-Swift.h"
Nota: Siempre que quiera usar su archivo Swift, debe importar la siguiente línea:
#import "YourProjectName-Swift.h"
fuente
Defines module
enBuild settings
queYes
es lo que fija cosas para mí!YourProjectName
en#import "YourProjectName-Swift.h"
será el nombre del proyecto a partir del paso 8. Es útil si el nombre del proyecto contiene caracteres especiales y no está seguro de qué es exactamente lo que debe formatearlo.Si está usando Cocoapods y está tratando de usar un pod Swift en un proyecto ObjC, simplemente puede hacer lo siguiente:
fuente
Vaya a la configuración de compilación en su archivo de proyecto y busque "Nombre de encabezado de interfaz generado por Objective-C . El valor de esa propiedad es el nombre que debe incluir.
Si su propiedad "Nombre del módulo del producto" (de la que depende la propiedad anterior de forma predeterminada) varía en función de si compila para prueba / depuración / lanzamiento / etc. (como lo hace en mi caso), haga que esta propiedad sea independiente de eso variación estableciendo un nombre personalizado.
fuente
Importar el
Swift
archivo dentroObjective-c
puede causar este error, si no lo haceimport
correctamente.NOTA: No tiene que importar archivos Swift externamente, solo tiene que importar un archivo que se encargue de los archivos Swift.
Cuando creó / copió el archivo Swift dentro del proyecto Objective-C . Hubiera creado un encabezado puente automáticamente.
Comprobar
Objective-C Generated Interface Header Name
enTargets -> Build Settings
.Según lo anterior, importaré
KJExpandable-Swift.h
tal como está.El suyo será
TargetName-Swift.h
, dondeTargetName
difiere según el nombre de su proyecto u otro objetivo que podría haber agregado y ejecutado en él.Como debajo de mi objetivo es
KJExpandable
, entonces esKJExpandable-Swift.h
fuente
Primer paso:-
Seleccione Objetivo del proyecto -> Configuración de compilación -> Buscar ('Definir') -> Definir valor de actualización del módulo No a Sí
"Define Módulo": SÍ .
"Incrustar siempre bibliotecas estándar de Swift": SÍ .
"Instalar el encabezado de compatibilidad de Objective-C": SÍ .
Segundo paso:-
Agregue la clase de archivo Swift en el archivo Objective C ".h" como se muestra a continuación
Importe 'ProjectName (Su nombre de proyecto) -Swift.h' en el archivo Objective C ".m"
fuente
Hay una advertencia si está importando código Swift en sus archivos Objective-C dentro del mismo marco. Debe hacerlo especificando el nombre del marco y los corchetes angulares:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
aquí está la configuración de compilación "Nombre del módulo del producto" (PRODUCT_NAME = MyFramework
).Simplemente agregar
#import "MyFramework-Swift.h"
no funcionará. Si verifica el directorio de productos compilados (antes de que#import
se agregue, por lo que ha tenido al menos una compilación exitosa con algún código Swift en el destino), aún debería ver el archivoMyFramework-Swift.h
en elHeaders
directorio.fuente
Si tiene un proyecto creado en Swift 4 y luego agregó archivos Objective-C, hágalo así:
Referencia: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
fuente
Consulte las notas preliminares sobre Swift y Objective C en el mismo proyecto
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75
Deberías estar importando
fuente
The name of this header is your product module name followed by adding "-Swift.h".
Entonces, no es el nombre de la clase como escribió, sino el nombre de su módulo de producto y eso se encarga de importar todos los archivos rápidos, no solo uno específicoBusque "Nombre del encabezado de la interfaz generada por Objective-C" en la Configuración de compilación del destino que está tratando de compilar (digamos que es
MyApp-Swift.h
) e importe el valor de esta configuración (#import "MyApp-Swift.h"
) en el archivo de origen al que está intentando acceder sus API SwiftEl valor predeterminado para este campo es
$(SWIFT_MODULE_NAME)-Swift.h
. Puede verlo si hace doble clic en el campo de valor de la configuración "Nombre del encabezado de la interfaz generada por Objective-C".Además, si tiene guiones en el nombre de su módulo (digamos que es
My-App
), entonces$(SWIFT_MODULE_NAME)
todos los guiones serán reemplazados por guiones bajos. Entonces tendrás que agregar#import "My_App-Swift.h"
.fuente
Si desea utilizar el archivo Swift en la clase Objective-C , entonces, desde Xcode 8 en adelante, puede seguir los siguientes pasos:
Si ha creado el proyecto en Objective-C:
Compílelo y si generará un error de enlazador como: compilado con una versión más nueva del lenguaje Swift (3.0) que los archivos anteriores (2.0) para arquitectura x86_64 o armv 7
Haz un cambio más en tu
Construye y corre.
fuente
Tenga cuidado con los guiones y guiones bajos, pueden mezclarse y su Nombre de proyecto y Nombre de destino no serán los mismos que SWIFT_MODULE_NAME.
fuente
verá cuando ingresa desde el teclado #import <y luego, automáticamente, Xcode le aconsejará.
fuente
Encuentra el archivo .PCH dentro del proyecto. y luego agregue
#import "YourProjectName-Swift.h"
Esto importará los encabezados de clase. Para que no tenga que importar a un archivo específico.fuente