271 votes

Ne pouvez pas utiliser Swift classes à l'intérieur de Objective-C

J'essaye d'intégrer Swift code de mon application.Mon application est écrite en Objective-C et j'ai ajouté un Swift de la classe. J'ai fait tout ce qui est décrit ici. Mais mon problème est que Xcode n'avez pas créé l' -Swift.h le fichier, seule la transition des en-têtes. Donc je l'ai créé, mais c'est en fait vide. Je peux utiliser tous mes ObjC classes dans Swift, mais je ne peux pas vice versa. J'ai marqué mon swift classe avec @objc , mais il n'a pas aidé. Que puis-je faire maintenant?

EDIT: Apple dit:" Lorsque vous importez Swift code en Objective-C, vous pouvez compter sur un Xcode généré fichier d'en-tête afin de dénoncer ces fichiers à l'Objective-C. [...] Le nom de cet en-tête est votre produit nom du module suivi par l'ajout de "-Swift.h". "

Maintenant, quand je veux importer ce Fichier, il donne une erreur:

    //MainMenu.m

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

    @implementation MainMenu

Voici mon FBManager.swift fichier:

@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
    }
}

69voto

Bill Points 6709

Ne pas créer le fichier d'en-tête vous-même. Supprimer celui que vous avez créé.

Assurez-vous que votre Swift classes sont marqués avec @objc ou hériter d'une classe qui dérive (directement ou indirectement) de la NSObject.

Xcode ne serez pas générer le fichier si vous avez des erreurs de compilation de votre projet - assurez-vous que votre projet s'appuie proprement.

14voto

Leo Natan Points 25262

Assurez-vous que votre projet définit un module et vous avez donné un nom au module. Puis reconstruire, et Xcode va créer de l' -Swift.h fichier d'en-tête et vous serez en mesure d'importer.

Vous pouvez définir de définition de module et le nom du module dans les paramètres de votre projet.

11voto

Max Mikheyenko Points 31

J'ai eu le même problème et il s'est avéré symboles spéciaux dans le nom du module sont remplacés par xcode (dans mon cas des tirets fini par être soulignés). Dans les paramètres de projet cochez la case "nom du module" pour trouver le nom du module pour votre projet. Après cela, utiliser ModuleName-Swift.h ou renommer le module dans les paramètres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X