J'ai écrit une bibliothèque dans Swift et je n'ai pas pu l'importer dans mon projet actuel, écrit en Objective-C.
Existe-t-il des moyens de l'importer?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
objective-c
import
swift
Viktor Radchenko
la source
la source
Réponses:
Vous devez importer
TargetName-Swift.h
. Notez que c'est le nom cible - les autres réponses font l'erreur d'utiliser le nom de la classe.Ce fichier unique est un en-tête généré automatiquement qui définit les interfaces Objective-C pour toutes les classes Swift de votre projet qui sont annotées
@objc
ou héritées deNSObject
.Considérations:
Si votre nom cible contient des espaces, remplacez-les par des traits de soulignement (par exemple,
My Project
devientMy_Project-Swift.h
)Si votre cible est un framework, vous devez importer
<TargetName/TargetName-Swift.h>
Assurez-vous que votre fichier Swift est membre de la cible
la source
Instructions du site Web d'Apple:
Révision:
Vous ne pouvez importer que "ProductName-Swift.h" dans des fichiers .m.
la source
NSObject
!!! vous ne pouvez pas simplement déclarer unclass Blah
en un rien de temps et le faire fonctionner. ça doit êtreclass Blah : NSObject
Voici quoi faire:
Créer un nouveau projet dans Objective-C
Créer un nouveau
.swift
fichierCliquez sur votre fichier de projet Xcode
Cliquez sur Build Settings
Recherchez la barre de recherche et recherchez le module Defines .
Modifiez la valeur sur Oui .
Rechercher le nom du module de produit .
Remplacez la valeur par le nom de votre projet.
Dans Délégué d'application, ajoutez les éléments suivants:
#import "YourProjectName-Swift.h"
Remarque: chaque fois que vous souhaitez utiliser votre fichier Swift, vous devez importer la ligne suivante:
#import "YourProjectName-Swift.h"
la source
Defines module
dansBuild settings
àYes
ce que les choses fixé pour moi!YourProjectName
dans#import "YourProjectName-Swift.h"
sera le nom du projet de l'étape 8. Utile si le nom de votre projet contient des caractères spéciaux et que vous ne savez pas exactement comment vous devez le formater.Si vous utilisez des Cocoapods et essayez d'utiliser un pod Swift dans un projet ObjC, vous pouvez simplement faire ce qui suit:
la source
Accédez aux paramètres de génération dans votre fichier de projet et recherchez «Nom d'en-tête d'interface généré par Objective-C . La valeur de cette propriété est le nom que vous devez inclure.
Si votre propriété "Product Module Name" (celle dont dépend la propriété ci-dessus par défaut) varie selon que vous compilez pour test / debug / release / etc (comme c'est le cas dans mon cas), alors rendez cette propriété indépendante de celle variation en définissant un nom personnalisé.
la source
L'importation d'un
Swift
fichier à l'intérieurObjective-c
peut provoquer cette erreur, si elle ne fonctionne pasimport
correctement.REMARQUE: vous n'avez pas besoin d'importer des fichiers Swift en externe, il vous suffit d'importer un fichier qui prend en charge les fichiers Swift.
Lorsque vous avez créé / copié un fichier Swift dans le projet Objective-C . Il aurait créé automatiquement un en-tête de pontage.
Vérifiez
Objective-C Generated Interface Header Name
àTargets -> Build Settings
.Sur la base de ce qui précède, je vais importer
KJExpandable-Swift.h
tel quel.Le vôtre sera
TargetName-Swift.h
, OùTargetName
diffère selon le nom de votre projet ou une autre cible que vous pourriez avoir ajoutée et exécutée dessus.Comme ci-dessous mon objectif est
KJExpandable
, il est doncKJExpandable-Swift.h
la source
Premier pas:-
Sélectionnez la cible du projet -> Paramètres de construction -> Rechercher ('Définir') -> Définir la valeur de mise à jour du module Non à Oui
"Définit le module": OUI .
"Toujours intégrer des bibliothèques standard Swift": OUI .
"Installer l'en-tête de compatibilité Objective-C": OUI .
Deuxième étape:-
Ajouter une classe de fichier Swift dans le fichier Objective C ".h" comme ci-dessous
Importez 'ProjectName (votre nom de projet) -Swift.h' dans le fichier Objective C ".m"
la source
Il y a une mise en garde si vous importez du code Swift dans vos fichiers Objective-C dans le même cadre. Vous devez le faire en spécifiant le nom du cadre et les crochets:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
voici le paramètre de construction "Product Module Name" (PRODUCT_NAME = MyFramework
).Ajouter simplement
#import "MyFramework-Swift.h"
ne fonctionnera pas. Si vous vérifiez le répertoire des produits créés (avant qu'un tel#import
fichier ne soit ajouté, vous avez donc eu au moins une génération réussie avec du code Swift dans la cible), vous devriez toujours voir le fichierMyFramework-Swift.h
dans leHeaders
répertoire.la source
Si vous avez créé un projet dans Swift 4, puis ajouté des fichiers Objective-C, procédez comme suit:
Référence: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
la source
Consultez les notes préliminaires sur Swift et Objective C dans le même projet
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75
Vous devriez importer
la source
The name of this header is your product module name followed by adding "-Swift.h".
ce n'est donc pas le nom de la classe comme vous l'avez écrit, mais le nom de votre module de produit et qui s'occupe d'importer tous les fichiers rapides, pas seulement un spécifiqueRecherchez «Nom d'en-tête d'interface généré par Objective-C» dans les paramètres de construction de la cible que vous essayez de construire (disons que c'est
MyApp-Swift.h
) et importez la valeur de ce paramètre (#import "MyApp-Swift.h"
) dans le fichier source auquel vous essayez d'accéder. vos API Swift.La valeur par défaut de ce champ est
$(SWIFT_MODULE_NAME)-Swift.h
. Vous pouvez le voir si vous double-cliquez dans le champ de valeur du paramètre "Nom d'en-tête d'interface généré par Objective-C".De plus, si vous avez des tirets dans le nom de votre module (disons que c'est le cas
My-App
),$(SWIFT_MODULE_NAME)
tous les tirets seront remplacés par des traits de soulignement. Alors, vous devrez ajouter#import "My_App-Swift.h"
.la source
Si vous souhaitez utiliser le fichier Swift dans la classe Objective-C , à partir de Xcode 8, vous pouvez suivre les étapes ci-dessous:
Si vous avez créé le projet dans Objective-C:
Compilez-le et s'il générera une erreur de l'éditeur de liens comme: compilé avec une version plus récente du langage Swift (3.0) que les fichiers précédents (2.0) pour l'architecture x86_64 ou armv 7
Faites encore un changement dans votre
Construisez et exécutez.
la source
Soyez prudent avec les tirets et les traits de soulignement, ils peuvent être mélangés et votre nom de projet et votre nom cible ne seront pas les mêmes que SWIFT_MODULE_NAME.
la source
vous verrez quand vous entrez à partir du clavier #import <et après automatiquement Xcode vous conseillera.
la source
Recherchez le fichier .PCH dans le projet. puis ajoutez
#import "YourProjectName-Swift.h"
Cela importera les en-têtes de classe. Pour que vous n'ayez pas à importer dans un fichier spécifique.la source