Estoy tratando de llamar a un código en un archivo de Utilidades escrito en Swift desde un archivo Objective-C.
En este momento, la clase en el archivo Swift se ve así:
class ImageClass: NSObject { public func imageFromString(name: String?) -> UIImage? { //code to make image return image } }Estoy tratando de llamarlo desde el archivo Objective-C con:
UIImage *myImage = [ImageClass imageFromString:@"test"];sin embargo, esto está dando error:
Use of undeclared identifier 'ImageClass'Sé que se puede acceder al archivo de Utilidades desde el archivo de Objective-C porque llamo a otros métodos allí aunque use una Instancia compartida.
¿Alguien puede sugerir la forma correcta de llamar al código? En realidad, no me importa si es una clase o una instancia compartida, solo necesito poder llamarlo.
Editar:
Como sugirió @Charles Srstka, hice CMD-clic en el archivo #import myapp.swift , salté a Definición y muestra lo siguiente en el encabezado:
- (UIImage * _Nullable)imageFromStringWithName:(NSString * _Nullable)name SWIFT_WARN_UNUSED_RESULT;En consecuencia, intenté agregar WithName (que había olvidado) a la invocación, así que tengo:
UIImage *myImage = [ImageClass imageFromStringWithName:@"test"];pero sigo recibiendo un error con o sin @objc antes del método:
No known class method for selector 'imageFromStringWithName:'En Swift 4.2 y más reciente
Agregue esta línea a su archivo "*.m":
#import "YourProjectName-Swift.h"Agregue @objc antes de su función:
@objc public func imageFromString(name: String?) -> UIImage? { //code to make the image return image }Llámalo dentro de la clase Objective-C:
ImageClass *imgObject = [[ImageClass alloc] init]; UIImage *myImage = [imgObject imageFromStringWithName:@"test"];Agregue esta línea a su archivo Objective-C:
#import "YourProjectName-Swift.h" Reemplace YourProjectName con el nombre de su proyecto. Esto hará que todas las clases de Swift compatibles con Objective-C en su proyecto sean visibles para su código de Objective-C.
Tenga en cuenta que también deberá agregar la anotación @objc a sus func de funciones para que los métodos sean visibles para Objective-C.