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 un moyen de l'importer?
#import "SCLAlertView.Swift" - 'SCLAlertView.Swift' file not found
Vous devez importer TargetName-Swift.h
. Notez que c'est le nom de la 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 annotées avec @objc
ou héritées de NSObject
.
Considérations:
Si votre nom de cible contient des espaces, remplacez-les par des traits de soulignement (par exemple, My Project
devient My_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
Instructions sur le site Web Apple:
Pour importer le code Swift dans Objective-C à partir du même cadre
Sous Paramètres de construction, dans Conditionnement, assurez-vous que le paramètre module Définit pour cette cible de structure est défini sur Oui. Importez le code Swift de cette cible d'infrastructure dans n'importe quel fichier .m Objective-C de cette cible d'infrastructure à l'aide de cette syntaxe et en substituant les noms appropriés:
# import "ProductName-Swift.h"
Révision:
Vous pouvez uniquement importer "ProductName-Swift.h" dans des fichiers .m.
Les fichiers Swift de votre cible seront visibles dans les fichiers .b Objective-C contenant cette instruction d'importation.
Pour éviter les références cycliques, n’importez pas Swift dans un fichier d’en-tête Objective-C. Au lieu de cela, vous pouvez transférer la classe de déclaration Swift pour l’utiliser dans un en-tête Objective-C. Notez que vous ne pouvez pas sous-classer une classe Swift dans Objective-C.
Voici ce qu'il faut faire:
Créer un nouveau projet en Objective-C
Créer un nouveau fichier .Swift
Cliquez sur votre fichier de projet Xcode
Cliquez sur Build Settings
Trouvez le barre de recherche et recherchez module de définition.
Remplacez la valeur par Yes.
Rechercher 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"
Accédez aux paramètres de construction de votre fichier 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é "Nom du module de produit" (celle dont dépend par défaut la propriété ci-dessus) varie selon que vous compilez pour test/debug/release/etc (comme c'est le cas dans mon cas), indiquez cette propriété indépendamment de celle variation en définissant un nom personnalisé.
L'importation du fichier Swift
à l'intérieur de Objective-c
peut être à l'origine de cette erreur, si import
n'est pas correctement.
REMARQUE: Vous n'avez pas besoin d'importer des fichiers Swift en externe, il vous suffit d'importer un fichier qui gère les fichiers Swift.
Lorsque vous avez créé/copié le fichier Swift à l'intérieur du projet Objective-C . Il aurait créé un en-tête de pontage automatiquement.
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.
Votre sera TargetName-Swift.h
, Où TargetName
diffère selon le nom de votre projet ou une autre cible que vous auriez pu ajouter et exécuter.
Comme ci-dessous, ma cible est KJExpandable
, donc KJExpandable-Swift.h
Première étape: -
Sélectionnez Cible du projet -> Paramètre de construction -> Recherche ('Définir') -> Définir le module mettre à jour la valeur Non à Oui
"Module défini": OUI.
"Toujours intégrer Swift Bibliothèques standard": YES.
"Installer l'en-tête de compatibilité Objective-C": YES.
Deuxième étape: -
Ajouter la classe de fichier Swift dans Objective C "Fichier" .h "comme ci-dessous
#import <UIKit/UIKit.h>
@class TestViewController(Swift File);
@interface TestViewController(Objective C File) : UIViewController
@end
Importer 'NomProjet (Votre Nom Projet) -Swift.h' dans le fichier ".m" d'Object C
//TestViewController.m
#import "TestViewController.h"
/*import ProjectName-Swift.h file to access Swift file here*/
#import "ProjectName-Swift.h"
Il y a une mise en garde si vous importez du code Swift dans vos fichiers Objective-C au sein du même framework. 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 construits (avant qu'un tel #import
soit ajouté, de sorte que vous ayez au moins une construction réussie avec du code Swift dans la cible), vous devriez toujours voir le fichier MyFramework-Swift.h
dans le répertoire Headers
.
Si vous avez créé un projet dans Swift 4 puis ajouté des fichiers Objective-C, procédez comme suit:
@objcMembers
public class MyModel: NSObject {
var someFlag = false
func doSomething() {
print("doing something")
}
}
Référence: https://useyourloaf.com/blog/objc-warnings-upgrading-to-Swift-4/
Consultez les notes préliminaires sur Swift et Objective C dans le même projet
Vous devriez importer
#import "SCLAlertView-Swift.h"
Recherchez "Nom de l’en-tête de l’interface générée Objective-C" dans les paramètres de construction de la cible que vous essayez de créer (supposons que c’est MyApp-Swift.h
), puis importez la valeur de ce paramètre ( #import "MyApp-Swift.h"
) dans le fichier source où 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 My-App
), dans la $(Swift_MODULE_NAME)
, tous les tirets seront remplacés par des traits de soulignement. Alors vous devrez ajouter #import "My_App-Swift.h"
.
Si vous souhaitez utiliser le fichier Swift dans 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ère une erreur de l'éditeur de liens, telle que: compilée avec la version plus récente de Swift language (3.0) par rapport aux fichiers précédents (2.0) pour l'architecture x86_64 ou armv 7
Faites encore un changement dans votre
Construire et exécuter.
#import <TargetName-Swift.h>
vous verrez lorsque vous entrerez au clavier #import <et après, Xcode vous conseillera automatiquement.