programar - Función Call Swift de la clase Objective C
swift(lenguaje de programación) (5)
Compruebe el archivo -Swift.h que tiene la importación en su archivo .m en el objetivo C:
#import <YourProjectName-Swift.h>
Haga clic en esa línea y haga clic con el botón izquierdo en: saltar a la definición.
Este archivo debe incluirse automáticamente, no manualmente.
Tengo un problema. Tengo un proyecto Old Objective C y quiero llamar a la nueva función Swift y el objeto, tengo crear el archivo "-Bridging-Header.h" y "-Swift.h"
fue fácil para mí llamar a la función de Swift a Objective C, pero tengo un problema para invertir.
Así que he creado una clase simple "System.Swift"
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
ahora intento seguir la documentación here y dentro del archivo <...> - Swift.h tengo que escribir esto
@class System;
@interface System : NSObject
-(void)printSome;
@end
y lo he importado dentro de mi Clase Objective C. En este punto dentro de mi clase Objective C (actualmente UIViewController) de mi código Objective C he intentado llamar al método "printSome":
- (void)viewDidLoad
{
[super viewDidLoad];
System * sis = [[System alloc] init];
[sis printSome];
//any additional setup after loading the view from its nib.
}
ahora tengo el siguiente error:
Símbolos no definidos para la arquitectura i386: "_OBJC_CLASS _ $ _ System", referenciado de: objc-class-ref en "ObjectiveC_Class_That_Call_Swift_Object" .o ld: símbolos no encontrados para la arquitectura i386 clang: error: comando del enlazador falló con el código de salida 1 (uso -v para ver la invocación)
¿Puede ayudarme alguien?
Saludos a todos.
Problema Resuelto, previamente <ProductModuleName>-Swift.h
un nuevo archivo .h
en mi clase Objective-C llamada <ProductModuleName>-Swift.h
pero, como descubrí más tarde, este paso no es necesario porque el compilador crea el archivo necesario invisible.
Simplemente incluya <ProductModuleName>-Swift.h
en su clase y debería funcionar.
Si aún no ve su clase, incluso después de importar <ProductModuleName>-Swift.h
.
Asegúrate de que tu clase esté UIViewController
una clase nativa (por ejemplo, UIViewController
) o al menos si solo es una clase de utilidad, haz que sea la subclase NSObject
. Tu clase ahora debería mostrarse.
Si gracias
es extraño pero funcionará
1) Add @objc to Swift class
2) Add in .m
#import "(ProjectName)-Swift.h"
3) Call from .h
@class SwiftClass;
4)On SwiftClass
click "Command" + Left Click (Apple Documantation)
5) To see "-Swift.h" -> click "Command" + Left Click
La aplicación generará la interfaz para esta clase en -Swift.h
Ejemplo: SWIFT_CLASS ("_ TtC10Project17220PLHelper") @interface PLHelper
- (void) notifyForDownloading: (NSDictionary *) userInfo;
- (instancetype) init OBJC_DESIGNATED_INITIALIZER; @fin
Supongamos que tenemos ProjectName "MyFirstProjectOnSwift" y el nombre de clase rápido "mySwiftClass" y que la clase objetivoC es "MyObjectiveCLass"
Los siguientes pasos son:
Agregue #import "MyFirstProjectOnSwift-Swift.h" en "MyObjectiveCLass.m"
Agregue @class mySwiftClass en MyObjectiveCLass.h;
Luego en MyObjectiveCLass.m
mySwiftClass * myClass = [mySwiftClass new]; {Llamar como esto en cualquier método donde quiera llamar al método rápido.}
[myClass methodName];