J'ai un projet iOS écrit avec Objective-C. J'ai créé une classe Swift dans le projet, le fichier d'en-tête de pontage permettant d'accéder à objective-c dans Swift est généré avec succès et fonctionne correctement.
Mon problème est l'inverse. Je veux importer Swift classe dans le code objective-c.
Dans xcode, cible -> Paramètres de construction -> Swift section, je vois Objective-C Generated Interface Header Name
champ de valeur myModule-Swift.h
, mais quand j'importe cet en-tête dans ma classe objectif-c:
#import "myModule-Swift.h"
Je reçois une erreur du compilateur:
myModule-Swift.h file not found
et dans le projet, je ne trouve pas ce fichier non plus. Comment puis-je résoudre ce problème?
Ma version de xcode est 6.4
#import "YourModule-Swift.h"
(Exemple, Projet nommé CData
)
Comme à l’étape 1, allez dans Paramètres de construction et recherchez "Module défini", définissez les deux valeurs sur YES
Créez une classe qui étend NSObject
sur le fichier .Swift
Construire le projet à nouveau
Importer le fichier YourModule-Swift.h
Sur le fichier . M (veuillez noter qu'il est sensible à la casse, Mymodule
! == MyModule
)
OMG .. l'instruction d'importation réelle n'était pas "class-Swift.h" mais plutôt "projectname-Swift.h"
Vous pouvez trouver le nom du fichier si vous regardez dans les paramètres de construction-> Génération du code du compilateur Swift -> Nom d'en-tête d'interface généré par Objective-C
Le fichier n'a pas été généré lorsque j'ai glissé dans Swift la source dans l'interface graphique. Uniquement lorsque j'ai cliqué avec le bouton droit de la souris -> Ajouter un fichier au "projet". Il a ensuite demandé de générer les fichiers d'en-tête.
Au cas où quelqu'un se demanderait pourquoi, après avoir passé des heures sur ce problème, il n'est toujours pas résolu, vous vous trouvez peut-être dans une situation similaire à la mienne, où je développais en fait un framework, plutôt qu'une application.
Dans ce cas, le format de l'instruction d'importation pour en-tête d'interface généré par Objective-C est le suivant:
#import <ModuleName/ModuleName-Swift.h>
Mon ajout à Daniel Kroms répond:
N'ajoutez jamais l'en-tête -Swift.h à l'entête. Même si cela semble fonctionner. Ajoutez le fichier d'importation au fichier .m uniquement!
Si vous utilisez dans votre en-tête Swift classes, faites une déclaration forward avec @class swiftclassname avant votre @interface
Ensuite, vous verrez vos vraies erreurs dans votre code.
J'ai été empilé cela pendant un bon moment. Dans mon cas, mon nom de cible s'apparente à "my-app" et utilise un tiret dans le nom de la cible. J'ai essayé de #import "my-app-Swift.h"
, mais Xcode continuait à me donner des erreurs.
J'ai creusé dans le dossier 'DerivedData' et j'ai trouvé "my_app-Swift.h". Donc, si vous utilisez des caractères intéressants pour le nom de la cible. Vous pouvez essayer de remplacer ceux-ci par des traits de soulignement _
.
J'ai rencontré le même problème hier et j'ai travaillé pendant des heures pour résoudre ce problème sans résultat. D'autres ont peut-être été dans le même bateau que moi. J'ai suivi toutes les étapes décrites ci-dessus, mais rien n'a fonctionné.
La cause de la destruction de la mine était due à des artefacts de nom de projet omniprésents dans mon projet (après avoir précédemment changé de nom de manière incorrecte).
Si toutes les étapes ci-dessus échouent, je vous conseillerais de faire comme moi et de renommer votre projet afin que Xcode puisse réinitialiser quelque chose ... Cela résout le problème pour moi. Cela a fonctionné comme un charme!