objective-c - convert - swift to objective c online
¿Cómo puedo importar código Swift a Objective-C? (13)
Busque "Nombre de encabezado de interfaz generado por Objective-C" en la Configuración de compilación del objetivo que está tratando de construir (digamos que es MyApp-Swift.h
), e importe el valor de esta configuración ( #import "MyApp-Swift.h"
) en el archivo fuente donde intentas acceder a las API de Swift.
El 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 de encabezado de interfaz generado por Objective-C".
Además, si tiene guiones en el nombre de su módulo (digamos que es My-App
), en $(SWIFT_MODULE_NAME)
todos los guiones se reemplazarán con guiones bajos. Entonces tendrás que agregar #import "My_App-Swift.h"
.
Escribí una biblioteca en Swift y no pude importarla a mi proyecto actual, escrita en Objective-C.
¿Hay alguna forma de importarlo?
#import "SCLAlertView.swift" - ''SCLAlertView.swift'' file not found
Consulte las notas preliminares sobre Swift y Objective C en el mismo proyecto
Deberias estar importando
#import "SCLAlertView-Swift.h"
Encuentra el archivo .PCH dentro del proyecto. y luego agregue #import "YourProjectName-Swift.h"
Esto importará los encabezados de clase. Para que no tengas que importar en un archivo específico.
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "YourProjectName-Swift.h"
#endif
Hay una advertencia si importa código Swift en sus archivos de Objective-C dentro del mismo marco. Tienes que hacerlo especificando el nombre del marco y los corchetes angulares:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
aquí es 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 construidos (antes de agregar dicho #import
, de modo que haya tenido al menos una compilación exitosa con algún código Swift en el destino), aún debería ver el archivo MyFramework-Swift.h
en los Headers
directorio.
Importar un archivo Swift
dentro de Objective-c
puede causar este error, si no se import
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ó un archivo Swift dentro del proyecto Objective-C . Habría creado un encabezado puente automáticamente.
Verifique el Objective-C Generated Interface Header Name
en Targets -> Build Settings
.
Basado en lo anterior, importaré KJExpandable-Swift.h
tal como está.
TargetName-Swift.h
, donde TargetName
difiere según el nombre de tu proyecto u otro objetivo que TargetName
haber agregado y ejecutado en él.
Como abajo, mi objetivo es KJExpandable
, así que es KJExpandable-Swift.h
Instrucciones del sitio web de Apple:
Para importar código Swift en Objective-C desde el mismo framework
En Configuración de compilación , en Empaquetado , asegúrese de que la configuración del Módulo de definición para ese objetivo de la infraestructura esté establecida en Sí . Importe el código Swift de ese destino de marco en cualquier archivo .m de Objective-C dentro de ese objetivo de marco utilizando esta sintaxis y sustituyendo los nombres apropiados:
#importación "ProductName-Swift.h"
Revisión:
Solo puede importar "ProductName-Swift.h" en archivos .m.
Los archivos Swift en su destino serán visibles en los archivos .m de Objective-C que contienen esta declaración de importación.
Para evitar referencias cíclicas, no importe Swift en un archivo de encabezado de Objective-C. En su lugar, puede reenviar declarar una clase Swift para usarla en un encabezado de Objective-C. Tenga en cuenta que no puede subclasificar una clase Swift en Objective-C.
Necesitas importar TargetName-Swift.h
. Tenga en cuenta que es el nombre de destino, las otras respuestas cometen el error de utilizar el nombre de clase.
Este archivo único es un encabezado @objc
que define las interfaces de Objective-C para todas las clases Swift en su proyecto que se anotan con @objc
o se heredan de NSObject
.
Consideraciones:
Si su nombre de destino contiene espacios, reemplácelos con guiones bajos (por ejemplo,
My Project
convierte enMy_Project-Swift.h
)Si su destino es un marco, debe importar
<TargetName/TargetName-Swift.h>
Asegúrate de que tu archivo Swift sea miembro del objetivo
Si desea usar el archivo Swift en la clase Objective-C , a partir de Xcode 8 puede seguir los siguientes pasos:
Si has creado el proyecto en Objective-C:
- Crear nuevo archivo Swift
- Xcode solicitará automáticamente el archivo Bridge-Header
- Generalo
- Importe "ProjectName-Swift.h" en su controlador Objective-C (importe en implementación no en interfaz) (si su proyecto tiene espacio entre el nombre, use el guión bajo "Project_Name-Swift.h")
- Podrás acceder a tu clase de Objective-C en Swift.
Compílelo y si generará un error de vinculador como: compilado con una versión más nueva del lenguaje Swift (3.0) que los archivos anteriores (2.0) para la arquitectura x86_64 o armv 7
Haz un cambio más en tu
- Xcode -> Proyecto -> Destino -> Configuración de compilación -> Usar versión de idioma Swift heredada -> Sí
Construir y ejecutar.
Si tienes un proyecto creado en Swift 4 y luego agregas archivos Objective-C, hazlo así:
@objcMembers
public class MyModel: NSObject {
var someFlag = false // @objc
func doSomething() { // @objc
print("doing something")
}
}
Referencia: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
Vaya a la configuración de compilación en el archivo de su 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 por defecto) varía dependiendo de si compila para prueba / depuración / lanzamiento / etc (como lo hace en mi caso), entonces haga que esta propiedad sea independiente de la variación mediante la configuración de un nombre personalizado.
Esto es lo que hay que hacer:
Crear un nuevo proyecto en Objective-C
Crear un nuevo archivo
.swift
- Aparecerá una ventana emergente y le preguntará "¿Desea configurar un encabezado de puente de Objective-C?" .
- Elija Sí .
Haga clic en su archivo de proyecto Xcode
Haga clic en Crear configuración
Encuentra la barra de búsqueda y busca el módulo de definición .
Cambie el valor a Sí .
Buscar el nombre del módulo del producto .
Cambie el valor al nombre de su proyecto.
En el delegado de la aplicación, agregue lo siguiente:
#import "YourProjectName-Swift.h"
Nota: Siempre que desee utilizar su archivo Swift, debe importar desde la siguiente línea:
#import "YourProjectName-Swift.h"
Primer paso:-
Seleccione Project Target -> Build Setting -> Search (''Define'') -> Define Module update value No to Yes
"Define Module": YES .
"Siempre incrustar 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 abajo
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
Importe ''ProjectName (su nombre de proyecto) -Swift.h'' en el archivo ".m" del Objetivo C
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"