No se pueden usar clases Swift dentro de Objective-C

Resuelto dnnagy asked hace 54 años • 0 respuestas

Intento integrar Swiftcódigo en mi aplicación. Mi aplicación está escrita Objective-Cy agregué una Swiftclase. He hecho todo lo que se describe aquí . Pero mi problema es que Xcodeno he creado el -Swift.harchivo, solo los encabezados puente. Entonces lo creé, pero en realidad está vacío. Puedo usar todas mis clases de ObjC en Swift, pero no puedo hacerlo al revés. Marqué mi clase rápida con @objcpero no ayudó. ¿Qué puedo hacer ahora?

EDITAR: Apple dice:" Cuando importa código Swift a Objective-C, confía en un Xcode-generatedarchivo de encabezado para exponer esos archivos a Objective-C. [...] El nombre de este encabezado es el nombre del módulo de su producto seguido de la adición " -Swift.h”. "

Ahora cuando quiero importar ese archivo, me da un error:

    //MainMenu.m

    #import "myProjectModule-Swift.h" //Error: 'myProjectModule-Swift.h' file not found

    @implementation MainMenu

Aquí está mi archivo FBManager.swift:

@objc class FBManager: NSObject {

    var descr = "FBManager class"

    init() {
        super.init()
    }

    func desc(){
        println(descr)
    }

    func getSharedGameState() -> GameState{
        return GameState.sharedGameState() //OK! GameState is written in Objective-C and no error here
    }
}
dnnagy avatar Jan 01 '70 08:01 dnnagy
Aceptado

Pasé aproximadamente 4 horas intentando habilitarlo Swiften mi Xcodeproyecto basado en Objective-C. Mi myproject-Swift.harchivo se creó correctamente, pero Xcodeno vi mi archivo Swift-classes. Entonces, decidí crear un nuevo Xcodeproyecto basado en Objc y finalmente encontré la respuesta correcta. Espero que esta publicación ayude a alguien :-)

Integración Swift paso a paso para proyectos basados ​​en Xcode Objc:

  1. Cree un nuevo *.swiftarchivo (en Xcode) o agréguelo usando Finder.
  2. Crea un Objective-C bridging headercuando Xcode te pregunte sobre eso.
  3. Implemente su clase Swift:

    import Foundation
    
    // use @objc or @objcMembers annotation if necessary
    class Foo {
        //..
    }
    
  4. Abra Configuración de compilación y verifique estos parámetros:

    • Define el módulo: YES

      Copiar y pegar el nombre del parámetro en una barra de búsqueda

    • Nombre del módulo del producto: myproject

      Asegúrese de que el nombre del módulo de su producto no contenga ningún carácter especial.

    • Instalar el encabezado de compatibilidad de Objective-C: YES

      Una vez que haya agregado *.swiftel archivo al proyecto, esta propiedad aparecerá en Configuración de compilación

    • Encabezado de interfaz generado por Objective-C: myproject-Swift.h

      Este encabezado es generado automáticamente por Xcode

    • Encabezado de puente Objective-C: $(SRCROOT)/myproject-Bridging-Header.h
  5. Importe el encabezado de la interfaz Swift en su archivo *.m.

    #import "myproject-Swift.h"
    

    No prestes atención a errores y advertencias.

  6. Limpia y reconstruye tu proyecto Xcode.
  7. ¡Ganancia!
sig avatar Dec 02 '2014 14:12 sig

No cree el archivo de encabezado usted mismo. Elimina el que creaste.

Asegúrese de que sus clases Swift estén etiquetadas @objco hereden de una clase que derive (directa o indirectamente) de NSObject.

Xcode no generará el archivo si tiene algún error de compilación en su proyecto; asegúrese de que su proyecto se genere limpiamente.

Bill avatar Jun 13 '2014 14:06 Bill