/ / Integración de la aplicación Swift a Objective-C - ios, object-c, swift

Integración de la aplicación Swift a Objective-C - ios, object-c, swift

Tengo una aplicación Objective-C en la que me gusta integrar Swift, pero tengo un problema extraño.

Yo importé <#ProjectName#>-Swift.h a mi archivo de implementación, donde necesitaba la Clase Swift. Mi Swift Class se ve así:

import Foundation

@objc class FileIconColor: NSObject {

@objc func fileIconColorForSuffix(suffix: NSString) -> UIColor {
var color:UIColor!
//Some huge calculations
return color
}

//Just for testing
@objc func test () {
println("Test")
}

}

Puedo llamar a la Clase, pero no puedo acceder a las funciones de la clase; Como puedes ver, la @objc Los prefijos están ahí, tanto en la Clase como en sus funciones.

¿Sabes por que pasa esto? También construyo el proyecto antes de usar la función, porque primero se debe construir el encabezado de puente de Swift, ¿estoy en lo correcto?

Ah y por cierto, logré acceder al código Objective-C en mi Clase Swift. Por lo tanto, no puede estar mal (he creado manualmente el encabezado de puente de Objective-C) :)

Gracias david

Respuestas

2 para la respuesta № 1

Acabo de realizar una prueba para ver si funciona para mí en un antiguo proyecto de Objective C. Estoy en Xcode 6.0.1.

Hice esto:

  1. Actualicé mi proyecto anterior a Xcode 6 y configuré el Destino de Implementación en 7.1
  2. Creó un nuevo archivo Swift y dijo que sí para configurar un encabezado de puente de Objective-C.
  3. Pega tu código en él. (También tuve que importar UIKit para compilar UIColor.)
  4. En mi controlador principal de vista, pongo esto:

En la cima:

#import "PhotoUnzipper-Swift.h"

(PhotoUnzipper "es el nombre de mi proyecto)

y en viewDidLoad:

FileIconColor *color = [[FileIconColor alloc]  init];
[color test];

Se compiló y obtuve la impresión de "Prueba" en la consola.

Importante: yo si no importar el <#ProjectName#>-Swift.h expediente. Xcode se encarga de eso.

La primera vez que lo intenté, tuve problemas porquetenía un objetivo de despliegue de 4.1. (Tonto de mí). No parecía poder resolver eso, pero comencé de nuevo, y seguí exactamente los pasos anteriores y funcionó.