2017-05-25 1 views
2

J'ai une classe objective-c qui utilise les classes swift. Tout fonctionne bien. Je voulais importer la classe objective-c dans une classe rapide, j'ai donc ajouté son fichier d'en-tête à l'en-tête de pontage. Tout d'un coup j'ai eu une erreur le fichier Projectname_swift.h est introuvable.Ajout de la classe objective c qui utilise les classes swift à l'en-tête de pontage Projectname_swift.h non trouvé

Des idées pour résoudre ce problème? Est-ce réellement possible?

+0

Vous n'avez pas à importer quoi que ce soit dans la classe swift .. importez votre en-tête de classe objective-c dans l'en-tête de pontage .... Lorsque vous utilisez des appels rapides dans objectif-c, vous devez importer comme ceci "Projectname-Swift.h" ' – Bilal

+0

@Bilal Je n'importe pas d'en-tête obj-c dans une classe rapide. J'importe des classes rapides dans une classe obj-c que je veux utiliser dans une autre classe rapide en plaçant son fichier d'en-tête dans l'en-tête du pontage. Le compilateur ne l'aime pas. Une fois que j'ai mis le fichier d'en-tête dans l'en-tête de pont, le _swift.h échoue – Tibidabo

+0

Vous avez besoin d'un -, pas _, dans Projectname_swift.h – mikep

Répondre

1

Données dérivées propres. puis #import "ProjectName-Swift.h" dans vos fichiers c objectifs.

  1. Aller à Construire Paramètres-> Objective-C Generated Interface en-tête Nom et définissez la valeur à YourModule-Swift.h (ce qui est généralement déjà défini, c'est le nom du fichier que vous devez importer le fichier .m #import « YourModule-Swift.h »
  2. Aller à la recherche et paramètres de construction pour « Définit Module », définissez les deux valeurs YES
  3. Créer une classe rapide avec préfixe @objc par exemple classe @objc mySwiftClass { ...}
  4. Construire le projet à nouveau
+0

Le projet fonctionne tant que je ne veux pas utiliser une classe objectve-c qui importe une classe Swift dans une autre classe Swift. Donc Swift-> OBJ-C = OK, Swift-> OBJ-C-> Swift = Erreur – Tibidabo

1

ce sera mieux si vous utilisez une syntaxe d'erreur ou une capture d'écran. vous pouvez simplement essayer ceci 1. Accédez à votre projet en haut de la barre de navigation de droite 2. sélectionnez les paramètres de construction de la douleur moyenne. 3. recherche de l'en-tête de pontage Objective-C 4. juste en dessous vous trouverez "Generated interface HeaderName" 5. ajouter l'adresse correcte de votre fichier swift 6. nettoyer et construire le projet.

5

Laissez le Xcode construire le fichier de pont d'Objective-C à Swift.

Créer un temporary directory ailleurs. Dans là, vous créez un dummy Xcode Swift project, donnez le project name le same comme your existing Current Project Name. Ensuite, ajoutez un nouveau fichier, Objective-C (fichier .m). Le Xcode va vous créer un fichier d'en-tête de pont, click sur the create bridge file (le bouton le plus à droite).

Maintenant, vous localisez l'emplacement du fichier d'en-tête dans le Finder. Puis faites glisser dans votre Current Project of Interest, n'oubliez pas de checked l'option copy file if necessary. Ajoutez le #import '.....' nécessaire dans le fichier d'en-tête.

Vous devriez être bon. Si tout fonctionne correctement, supprimez le dummy project.

3

une référence circulaire a été créée, ce qui rend le code Swift impossible à compiler (ce qui conduit à l'erreur canari indiquant que le fichier _Swift.h est introuvable). J'ai fourni une réponse plus approfondie à des questions similaires here et here.

longue histoire courte, le documentation dit pas explicitement à ceci:

Pour éviter des références cycliques, ne pas importer le code Swift dans un fichier en-tête Objective-C (.h). Au lieu de cela, vous pouvez transférer une classe Swift ou un protocole pour la référencer dans une interface Objective-C.

Les déclarations anticipées de classes et de protocoles Swift ne peuvent être utilisées que comme types pour les déclarations de méthode et de propriété.

afin de rendre votre code recompiler vous devrez supprimer la ligne #import "Projectname_Swift.h" de l'en-tête incriminée Objective-C. Idéalement, vous pouvez simplement déplacer l'instruction d'importation dans votre fichier .m, mais si vous devez exposer publiquement la classe Swift dans votre en-tête ObjC, vous devez la déclarer en utilisant @class SomeSwiftClass;.