web-dev-qa-db-fra.com

import Swift classe dans Objective-c, fichier <myModule> -Swift.h non trouvé)

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

39
user842225

Mis à jour en mai 2018 Xcode 9.3


  1. Paramètres de construction-> Nom d'en-tête d'interface généré par Objective-C
    et définissez la valeur sur YourModule-Swift.h (généralement déjà définie, il s’agit du nom de fichier sur lequel vous souhaitez importer . m fichier #import "YourModule-Swift.h"

(Exemple, Projet nommé CData)

Example

  1. Comme à l’étape 1, allez dans Paramètres de construction et recherchez "Module défini", définissez les deux valeurs sur YES

  2. Créez une classe qui étend NSObject sur le fichier .Swift

Example

  1. Construire le projet à nouveau

  2. Importer le fichier YourModule-Swift.h Sur le fichier . M (veuillez noter qu'il est sensible à la casse, Mymodule! == MyModule)

enter image description here

71
Daniel Krom

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.

9
killerz

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>
8
Karol Kulesza

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.

5
ThorstenC

Pour moi, le problème était que j'avais bitcode sur. Lorsque j'ai cliqué sur "Mettre à jour les paramètres recommandés du projet", certains paramètres ont probablement été modifiés. J'ai activé "Bitcode activé" sur "Non" dans les paramètres de construction et le problème est résolu.

enter image description here

3
Gomfucius

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 _.

1
Kaz Yoshikawa

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!

0
Travis Tubbs