tipos programar programación objective los lenguajes lenguaje entre diferencias datos básicos objective-c swift

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:

  1. Agregue #import "MyFirstProjectOnSwift-Swift.h" en "MyObjectiveCLass.m"

  2. Agregue @class mySwiftClass en MyObjectiveCLass.h;

  3. Luego en MyObjectiveCLass.m

    mySwiftClass * myClass = [mySwiftClass new]; {Llamar como esto en cualquier método donde quiera llamar al método rápido.}

  4. [myClass methodName];