Comment appeler du code Objective-C depuis Swift : l'amitié des langages en iOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Objective-C et Swift : deux mondes, un seul projet

\n\n

Vous écrivez en Swift, mais vous avez à disposition une bibliothèque écrite en Objective-C, ou un code ancien mais éprouvé en ObjC. Une situation familière ? Ne vous inquiétez pas : Apple a prévu un excellent mécanisme pour faire collaborer ces deux langages. Dans cet article, nous allons voir comment appeler du code Objective-C depuis Swift — rapidement, simplement et sans maux de tête.

\n\n

Cette question est l'une des plus populaires sur Stack Overflow (des milliers de vues et des centaines de votes). Et ce n'est pas pour rien : savoir intégrer Objective-C dans Swift ouvre l'accès à un immense héritage de bibliothèques et de code écrits pendant des décennies de développement iOS. Comprenons enfin comment cela fonctionne.

\n\n

Qu'est-ce que le Bridging Header et pourquoi en a-t-on besoin ?

\n\n

Le secret de l'amitié entre Swift et Objective-C est un fichier spécial appelé Bridging Header (en-tête de pont). C'est une sorte de traducteur : il indique à Swift quelles classes et fonctions en Objective-C sont disponibles et comment les appeler correctement.

\n\n

Lorsque vous créez un fichier de pont, le compilateur le prend automatiquement en charge et rend toutes les déclarations d'Objective-C visibles dans Swift. Il vous suffit d'importer les en-têtes ObjC dans ce fichier — et c'est prêt.

\n\n

Comment créer un Bridging Header dans Xcode

\n\n

La méthode la plus simple est de laisser Xcode le faire pour vous. Ajoutez simplement un nouveau fichier Objective-C à votre projet (File → New → File → Objective-C File). Xcode vous demandera : « Voulez-vous créer un Bridging Header ? » — répondez « Oui ». Ensuite, un fichier nommé YourProjectName-Bridging-Header.h apparaîtra dans le projet.

\n\n

Si vous travaillez déjà sur un projet et souhaitez ajouter le pont manuellement, procédez comme suit :

\n\n
    \n
  • Créez un nouveau fichier d'en-tête (File → New → File → Header File) et nommez-le, par exemple, MyProject-Bridging-Header.h.
  • \n
  • Dans les paramètres du projet (Build Settings), recherchez le paramètre Objective-C Bridging Header et indiquez le chemin vers votre fichier.
  • \n
\n\n

Prêt. Maintenant, tout ce que vous écrirez dans ce fichier sera accessible dans Swift.

\n\n

Écrire une classe Objective-C et la connecter à Swift

\n\n

Créons une classe simple en Objective-C qui saluera l'utilisateur. D'abord, le fichier d'en-tête (Greeter.h) :

\n\n
// Greeter.h\n#import <Foundation/Foundation.h>\n\n@interface Greeter : NSObject\n\n- (NSString *)greetWithName:(NSString *)name;\n\n@end\n
\n\n

Et maintenant, l'implémentation (Greeter.m) :

\n\n
// Greeter.m\n#import "Greeter.h"\n\n@implementation Greeter\n\n- (NSString *)greetWithName:(NSString *)name {\n    return [NSString stringWithFormat:@"Bonjour, %@ ! Ravi de vous rencontrer.", name];\n}\n\n@end\n
\n\n

Maintenant, le plus important. Ouvrez votre Bridging Header (par exemple, MyProject-Bridging-Header.h) et ajoutez-y :

\n\n
// MyProject-Bridging-Header.h\n#import "Greeter.h"\n
\n\n

Et voilà ! Vous pouvez maintenant utiliser la classe Greeter dans Swift comme si elle était écrite en Swift :

\n\n
// ViewController.swift\nimport UIKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        let greeter = Greeter()\n        let message = greeter.greet(withName: "Alexandre")\n        print(message) // Affichera : "Bonjour, Alexandre ! Ravi de vous rencontrer."\n    }\n}\n
\n\n

Notez que la méthode greetWithName: se transforme en Swift en greet(withName:). Il s'agit d'une adaptation automatique des noms de méthodes d'Objective-C au style Swift.

\n\n

Travailler avec des frameworks et bibliothèques Objective-C

\n\n

Il arrive souvent que vous deviez intégrer non pas votre propre code, mais une bibliothèque existante en Objective-C (par exemple, une ancienne version d'AFNetworking ou CocoaLumberjack). C'est encore plus simple :

\n\n
    \n
  • Installez la bibliothèque via CocoaPods, Carthage ou SPM.
  • \n
  • Importez ses en-têtes dans votre Bridging Header.
  • \n
  • Utilisez
  • \n

Blogs

Book Recommendations