J'ai un projet qui a été démarré dans Objective-C et j'essaie d'importer du code Swift dans les mêmes fichiers de classe que ceux dans lesquels j'ai précédemment écrit Objective-C.
J'ai consulté Apple docs sur l'utilisation de Swift et d'Objective-C dans le même projet, ainsi que sur SO question comme cela, mais toujours en vain: je continue à obtenir le fichier non erreur trouvée après la mise en #import "NewTestApp-Swift.h"
(NewTestApp
est le nom du produit et du module).
Voici ce que j'ai fait jusqu'à présent:
Define Modules
, sélectionnez YES
pour l'application.J'ai essayé d'utiliser #import "NewTestApp-Swift.h"
dans ViewController.m
, ViewController.h
et AppDelegate.m
mais aucun d'entre eux n'a fonctionné.
Que fais-je de manière incorrecte? Merci de votre aide.
Capture d'écran des paramètres:
Erreurs que je rencontre actuellement:
Je rencontrais le même problème et je ne parvenais pas à importer mon projet Swift dans les classes obj-c. En utilisant Xcode 6, (devrait fonctionner pour Xcode 6+) et a été capable de le faire de cette façon ....
@class MySwiftClass;
#import "ProductModuleName-Swift.h
Lien vers la documentation Apple à ce sujet
Si le code Swift est à l'intérieur d'un module (comme dans votre cas):
#import <ProductName/ProductModuleName-Swift.h>
Si le code Swift est dans le projet (mélange Swift et ObjC):
#import <ProductModuleName-Swift.h>
Dans votre cas, vous devez ajouter cette ligne dans le fichier * .m:
#import <NewTestApp/NewTestApp-Swift.h>
IMPORTANT: regardez le "<" dans la déclaration d'importation
Comment j'ai réussi à importer Swift dans objective-c:
Dans votre ViewController.m, importez le code Swift avec:
#import "MyProductModuleName-Swift.h"
Pour la dernière pièce de ce puzzle, merci à Swiftoverload de m'avoir informé de l'ajout d'un fichier Swift via l'interface graphique Xcode et de ne pas simplement glisser-déposer des fichiers Swift existants dans mon projet pour le faire fonctionner: http: // nikolakirev.com/blog/using-Swift-in-objective-c-project
Utilisation de Xcode 8.2.1 et si vous regardez Projet> Paramètres de construction> Nom d'en-tête d'interface généré par Objective-C , il indique un seul fichier d'en-tête portant le nom Product - Swift.h
Cela signifie qu'au lieu d'importer chaque module séparément du fichier .m d'Objective-C, en utilisant un fichier -Swift.h individuel, vous importez simplement un Product -Swift.h qui a agrégé tous les modules Swift.
J'ai rencontré le même problème en recherchant une méthode traditionnelle d'importation de modules séparément, mais la version actuelle de Xcode et Swift 3 l'a modifiée pour utiliser un seul en-tête pour toutes les importations de modules.
J'avais des problèmes pour importer Swift dans un projet Objective-C. Finalement, j'ai examiné le dossier Derivied Data pour vérifier ce que Xcode 7 générait. Le nom de fichier était complètement différent de celui auquel je m'attendais.
Une fois que j'ai eu le nom de fichier, j'ai importé cela et le projet a pu être construit.
DEFINE MODULES: YES Et importez "ProjectName-Swift.h" dans le fichier .m de la classe Obj-C
Cela a fonctionné pour moi pour accéder aux classes Swift à Obj-c.
Au cours du développement, il se peut que vous ayez une classe Swift non complètement implémentée, ce qui pourrait entraîner des erreurs de syntaxe. Le fichier d’en-tête Swift ne sera disponible que si tous les fichiers Swift sont exempts d’erreur.
Assurez-vous qu'il n'y a pas d'erreur de syntaxe dans les fichiers Swift, puis essayez d'importer l'en-tête Swift dans le fichier objective -c.
Si vous avez passé une heure sur cette question, suivez ces étapes pour vous aider à comprendre ce qui manque:
Importation du fichier d’en-tête, c.-à-d.
#import "<ProjectName>-Swift.h"
dans le fichier .h a généré une erreur, indiquant:
-Swift.h 'fichier non trouvé
et la construction a échoué.
Utilisez plutôt:
#import "<ProjectName>-Swift.h"
dans le fichier .m, et même si la même erreur apparaît, l’exécution du projet supprime malgré tout l’erreur.
Les classes Swift sont alors disponibles dans le fichier .m.
Avais rencontré le même problème avec mon équipe quand travaillait sur un projet utilisant git. Un développeur n'a pas mis à jour Xcode avec la dernière version (7.3) requise pour la dernière version de Swift 2.2. Le compilateur n'a donc pas reconnu la nouvelle syntaxe Swift et n'a pas pu générer d'interface pour la bibliothèque Swift (nom du projet-Swift.h). Vérifiez si la version de Xcode est la plus récente!
J'ai fait face au problème avec le nom du projet (cible). Il comprenait le symbole "-". La décision a donc été la suivante: si le nom du projet est "Test-App", le nom de la classe importée est "Test_App-Swift.h"
-Swift.h
devrait être créé automatiquement par Xcode si Swift code expose une API via @objc
ou @objcMembers
Habituellement, un emplacement ressemble à
~/Library/Developer/Xcode/DerivedData/
ProductModuleName-foo/
Build/
Intermediates.noindex/
ProductModuleName.build/
Debug-iphoneos/
ProductModuleName.build/
DerivedSources/
ProductModuleName-Swift.h
Il peut être changé par
Project editor -> select a target -> Build Settings -> Per-configuration Intermediate Build Files Path
Par défaut, la valeur est $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)