Swift parle toutes les langues : guide d'intégration avec Python, C et bien plus

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

Pourquoi Swift devrait-il "connaître" d'autres langages ?

\n\n

Imaginez que vous êtes un chef cuisinier dans un restaurant étoilé. Vous avez un couteau de marque (Swift) — tranchant, ergonomique, parfaitement adapté à votre main. Mais pour découper un poisson-globe, vous avez besoin d'un scalpel spécial (C), et pour créer une mousse parfaite, d'un mixeur haut de gamme (Python). Vous n'allez pas hacher le poisson avec votre couteau principal ? C'est pareil en programmation : l'intégration de Swift avec d'autres langages n'est pas un signe de faiblesse, mais un sommet de la maîtrise.

\n\n

L'écosystème Swift évolue rapidement, mais il n'existe pas dans le vide. Les bibliothèques d'apprentissage automatique sont écrites en Python, les analyseurs hautes performances en C, et le code hérité des systèmes bancaires en C++. Savoir unir ces mondes ouvre des possibilités cosmiques pour le développeur. Dans cet article, nous allons explorer trois scénarios clés : comment faire cohabiter Swift avec Python, C et C++.

\n\n

1. Swift + Python : la magie de PythonKit

\n\n

Apple ne serait pas Apple si elle n'avait pas rendu l'intégration aussi "swift-like". PythonKit est un framework qui permet d'appeler du code Python directement depuis Swift, comme s'il s'agissait de fonctions natives. L'installation est simple : il suffit d'ajouter une dépendance via Swift Package Manager.

\n\n

Configuration du projet

\n\n

Ajoutez dans Package.swift :

\n\n
let package = Package(\n    name: "MySwiftPythonApp",\n    dependencies: [\n        .package(url: "https://github.com/pvieito/PythonKit.git", branch: "master")\n    ],\n    targets: [\n        .target(name: "MySwiftPythonApp", dependencies: ["PythonKit"])\n    ]\n)
\n\n

Exemple : calcul des nombres de Fibonacci

\n\n

Supposons que vous ayez un script Python super optimisé pour calculer Fibonacci. Pourquoi le réécrire en Swift quand on peut l'appeler directement ?

\n\n

Fichier Python (fib.py) :

\n
def fib(n):\n    a, b = 0, 1\n    for _ in range(n):\n        a, b = b, a + b\n    return a
\n\n

Code Swift :

\n
import PythonKit\n\n// 1. Charger le module (sans .py)\nlet fibModule = try Python.attemptImport("fib")\n\n// 2. Appeler la fonction\nlet result = fibModule.fib(10)\nprint("10e nombre de Fibonacci :", result) // Affiche : 55\n\n// 3. Travailler avec numpy (s'il est installé)\nlet np = Python.import("numpy")\nlet array = np.array([1, 2, 3, 4])\nprint(array * 2) // Affiche : [2 4 6 8]
\n\n

Notez que Python.attemptImport est une enveloppe sécurisée. Si le module n'est pas trouvé, vous obtiendrez une erreur, pas un plantage de l'application. L'intégration de Swift et Python via PythonKit fonctionne à la fois sur macOS et Linux (avec Python 3.x installé).

\n\n

Quand est-ce utile ?

\n
    \n
  • Vous avez besoin d'une bibliothèque qui n'existe pas en Swift (par exemple, pandas ou scikit-learn).
  • \n
  • Vous écrivez une application serveur avec Vapor et souhaitez utiliser Python pour les processus ETL.
  • \n
  • Vous prototypiez un modèle de ML en Python, puis l'intégrez dans une application iOS.
  • \n
\n\n

2. Swift + C : dialogue direct avec le "matériel"

\n\n

C est un langage légendaire. Les noyaux d'OS, les pilotes et la moitié de l'univers Unix sont écrits en C. Swift a été conçu pour que l'interopérabilité avec C soit la plus fluide possible. Vous pouvez appeler des fonctions de n'importe quelle bibliothèque C sans utiliser d'enveloppes.

\n\n

Importation de fonctions C

\n\n

Créez un fichier bridge.h et inscrivez-y les en-têtes nécessaires :

\n
// bridge.h\n#include <math.h>\n#include <string.h>
\n\n

Maintenant, dans Swift, vous pouvez utiliser ces fonctions directement :

\n
// Swift\nimport Foundation\n\nlet angle = 45.0 * .pi / 180.0\nlet sine = sin(angle) // Fonction C de math.h\nprint("Sinus de 45° :", sine)\n\n// Travailler avec des pointeurs\nlet str = "Bonjour, C !"\nstr.withCString { cString in\n    let length = strlen(cString) // Fonction C\n    print("Longueur de la chaîne :", length)\n}
\n\n

Créer votre propre bibliothèque C

\n\n

Suppo

Blogs

Book Recommendations