238 votes

L'en-tête Swift to Objective-C n'est pas créé dans Xcode 6

J'ai récemment travaillé pour ajouter Swift à un projet existant, pour obtenir de l'essayer dans un vrai monde de la mode.

Lors de l'ajout d'un Swift fichier source pour le projet, je n'ai pas de problèmes à propos de l'obtention de la "Transition de l'en-Tête", qui est, Objective-C, Swift.

Mais la Swift.h fichier d'en-tête qui est censé exposer Swift classes soit marquée @objc ou des sous-classes de ObjC classes, est nulle part pour être trouvé :-(

Je ne vois pas d'instructions spécifiques sur la manière d'accomplir l'utilisation de ma nouvelle sous-classe, écrit en Swift, dans mon application principale de code (qui est toujours en Obj-C).

L'application que je suis développeur en chef de a une assez grande base de code (70.000 lignes), de sorte que la transition d'un seul coup il est hors de question.

161voto

David Kristensen Points 669

Maintenant ça marche.

  1. Le projet doit avoir un nom de module n'incluant pas d' espaces.
  2. Définit le module doit être défini sur Oui dans les paramètres de construction, sous Emballage.

Enfin fonctionne. Merci à tous pour votre aide :-)

122voto

macduff Points 108

J'ai eu un problème similaire et constaté que vous ne pouvez ajouter

#import "ProductModuleName-Swift.h"

aux fichiers obj-c .m, pas les fichiers .h pour l'en-tête de parapluie à trouver

57voto

petehare Points 167

J'ai trouvé que j'ai eu à corriger toutes les erreurs de compilation avant de générer le fichier.

Le problème pour moi est que c'était un poulet/oeuf problème, que je ne vois pas de construire des erreurs jusqu'à ce que j'avais commenté l' #import déclaration:

//#import "ProductModuleName-Swift.h"

qui a révélé un tas d'autres erreurs dans mon code Swift.

Une fois que j'ai fixé ces nouvelles erreurs et a obtenu la source du bâtiment avec succès, j'ai décommenté la #import et bingo! L'en-tête a été créé et l'importation correctement :)

42voto

JohnMorrison Points 161

Si le nom de votre module de projet contient des espaces, vous devez remplacer les espaces par un trait de soulignement.

Par exemple, si le nom de votre projet est "Mon projet", vous utiliserez:

#import "My_Project-Swift.h"

31voto

Luc-Olivier Points 172

* La seule chose importante est: *

pour utiliser le "Product Module Name" défini dans la cible, suivi de -Swift.h

 #import <Product Module Name>-Swift.h

// in each ObjectiveC .m file having to use swift classes
// no matter in which swift files these classes sit.
 

Peu importe si le paramètre "Définit le module" est défini sur Oui ou Non ou si le projet "Nom du module de produit" n'est pas défini.

Rappel: Les classes Swift doivent dériver de NSObject ou avoir été taguées avec l'attribut @objc afin d'être exposées à ObjectiveC / Foundation || Cacao ...

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: