Buscar..


Usando clases de Objective-C en Swift

Si tiene una clase existente que le gustaría usar, realice el Paso 2 y luego salte al Paso 5 . (Para algunos casos, tuve que agregar un #import <Foundation/Foundation.h explícito a un archivo ObjC más antiguo)

Paso 1: Agregar implementación de Objective-C - .m

Agregue un archivo .m a su clase y CustomObject.m nombre CustomObject.m

Paso 2: Añadir encabezado puente

Cuando agregue su archivo .m , es probable que reciba un mensaje que se parece a esto:

introduzca la descripción de la imagen aquí

Haga clic en !

Si no vio el indicador o borró accidentalmente el encabezado de puente, agregue un nuevo archivo .h a su proyecto y <#YourProjectName#>-Bridging-Header.h nombre <#YourProjectName#>-Bridging-Header.h

En algunas situaciones, especialmente cuando se trabaja con marcos ObjC, no agrega una clase Objective-C explícitamente y Xcode no puede encontrar el enlazador. En este caso, cree su archivo .h el nombre mencionado anteriormente, luego asegúrese de vincular su ruta en la configuración del proyecto de su objetivo de esta manera:

introduzca la descripción de la imagen aquí

Nota

Es una buena práctica vincular su proyecto usando la macro $(SRCROOT) para que, si mueve su proyecto, o trabaje en él con otros usando un repositorio remoto, aún funcione. $(SRCROOT) se puede considerar como el directorio que contiene su archivo .xcodeproj. Podría verse así:

$(SRCROOT)/Folder/Folder/<#YourProjectName#>-Bridging-Header.h

Paso 3: Añadir encabezado Objective-C - .h

Agregue otro archivo .h y CustomObject.h nombre CustomObject.h

Paso 4: Construye tu clase de Objective-C

En CustomObject.h

#import <Foundation/Foundation.h>

@interface CustomObject : NSObject

@property (strong, nonatomic) id someProperty;

- (void) someMethod;

@end

En CustomObject.m

#import "CustomObject.h"

@implementation CustomObject 

- (void) someMethod {
    NSLog(@"SomeMethod Ran");
}

@end

Paso 5: Agregar clase a Bridging-Header

En YourProject-Bridging-Header.h :

#import "CustomObject.h"

Paso 6: Usa tu objeto

En SomeSwiftFile.swift :

var instanceOfCustomObject: CustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
println(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()

No es necesario importar explícitamente, para eso sirve el encabezado de puente.

Usando clases rápidas en Objective-C

Paso 1: Crear nueva clase Swift

Agregue un archivo .swift a su proyecto y MySwiftObject.swift nombre MySwiftObject.swift

En MySwiftObject.swift :

import Foundation

class MySwiftObject : NSObject {

    var someProperty: AnyObject = "Some Initializer Val"

    init() {}

    func someFunction(someArg:AnyObject) -> String {
        var returnVal = "You sent me \(someArg)"
        return returnVal
    }

}

Paso 2: Importar archivos Swift a la clase ObjC

En SomeRandomClass.m :

#import "<#YourProjectName#>-Swift.h"

El archivo: <#YourProjectName#>-Swift.h ya debe crearse automáticamente en su proyecto, incluso si no puede verlo.

Paso 3: Usa tu clase

MySwiftObject * myOb = [MySwiftObject new];
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
myOb.someProperty = @"Hello World";
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
NSString * retString = [myOb someFunction:@"Arg"];
NSLog(@"RetString: %@", retString);

Nota:

1. CodeCompletion no se estaba comportando con tanta precisión como me gustaría. En mi sistema, ejecutar una compilación rápida con "cmd + r" pareció ayudar a Swift a encontrar parte del código Objc y viceversa.

2. Si agrega el archivo .swift a un proyecto anterior y obtiene un error: dyld: Library not loaded: @rpath/libswift_stdlib_core.dylib , intente reiniciar completamente Xcode.

3. Aunque originalmente era posible usar clases Swift puras en Objective-C usando el prefijo @objc , después de Swift 2.0, esto ya no es posible. Ver historial de edición para la explicación original. Si esta funcionalidad se vuelve a habilitar en futuras versiones de Swift, la respuesta se actualizará en consecuencia.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow