Swift spricht alle Sprachen: Leitfaden zur Integration mit Python, C und mehr

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum sollte Swift andere Sprachen "kennen"?

\n\n

Stellen Sie sich vor, Sie sind Chefkoch in einem exklusiven Restaurant. Sie haben ein Markenmesser (Swift) – scharf, ergonomisch, liegt perfekt in der Hand. Aber um einen Kugelfisch zu filetieren, brauchen Sie ein spezielles Skalpell (C), und für die Herstellung einer perfekten Mousse einen teuren Mixer (Python). Sie würden doch nicht den Fisch mit dem Hauptmesser zerhacken? So ist es auch in der Programmierung: Die Integration von Swift mit anderen Sprachen ist kein Zeichen von Schwäche, sondern die Krönung der Meisterschaft.

\n\n

Das Swift-Ökosystem entwickelt sich rasant, aber es existiert nicht im luftleeren Raum. Bibliotheken für maschinelles Lernen sind in Python geschrieben, Hochleistungsparser in C und Legacy-Code von Banksystemen in C++. Die Fähigkeit, diese Welten zu vereinen, eröffnet dem Entwickler kosmische Möglichkeiten. In diesem Artikel analysieren wir drei Schlüsselszenarien: Wie man Swift mit Python, C und C++ befreundet.

\n\n

1. Swift + Python: Die Magie von PythonKit

\n\n

Apple wäre nicht Apple, wenn es die Integration nicht maximal "swiftig" gemacht hätte. PythonKit ist ein Framework, das es ermöglicht, Python-Code direkt aus Swift heraus aufzurufen, als wäre es nativer Code. Die Installation ist einfach: Fügen Sie einfach eine Abhängigkeit über den Swift Package Manager hinzu.

\n\n

Projekteinrichtung

\n\n

Fügen Sie in Package.swift hinzu:

\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

Beispiel: Fibonacci-Zahlen berechnen

\n\n

Angenommen, Sie haben ein superoptimiertes Python-Skript zur Berechnung von Fibonacci. Warum sollten Sie es in Swift neu schreiben, wenn Sie es direkt aufrufen können?

\n\n

Python-Datei (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

Swift-Code:

\n
import PythonKit\n\n// 1. Modul laden (ohne .py)\nlet fibModule = try Python.attemptImport("fib")\n\n// 2. Funktion aufrufen\nlet result = fibModule.fib(10)\nprint("10. Fibonacci-Zahl:", result) // Ausgabe: 55\n\n// 3. Mit numpy arbeiten (falls installiert)\nlet np = Python.import("numpy")\nlet array = np.array([1, 2, 3, 4])\nprint(array * 2) // Ausgabe: [2 4 6 8]
\n\n

Beachten Sie: Python.attemptImport ist ein sicherer Wrapper. Wenn das Modul nicht gefunden wird, erhalten Sie einen Fehler, aber keinen App-Absturz. Die Integration von Swift und Python über PythonKit funktioniert sowohl unter macOS als auch unter Linux (mit Python 3.x).

\n\n

Wann wird dies benötigt?

\n
    \n
  • Sie benötigen eine Bibliothek, die es nicht in Swift gibt (z. B. pandas oder scikit-learn).
  • \n
  • Sie schreiben eine Serveranwendung mit Vapor und möchten Python für ETL-Prozesse nutzen.
  • \n
  • Sie prototypisieren ein ML-Modell in Python und betten es dann in eine iOS-App ein.
  • \n
\n\n

2. Swift + C: Direkte Kommunikation mit der "Hardware"

\n\n

C ist eine legendäre Sprache. In ihr sind Betriebssystemkerne, Treiber und die Hälfte des Unix-Universums geschrieben. Swift ist so konzipiert, dass die Interoperabilität mit C möglichst schmerzfrei ist. Sie können Funktionen aus jeder C-Bibliothek aufrufen, ohne Wrapper verwenden zu müssen.

\n\n

Import von C-Funktionen

\n\n

Erstellen Sie eine Datei bridge.h und fügen Sie die benötigten Header ein:

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

Jetzt können Sie diese Funktionen direkt in Swift verwenden:

\n
// Swift\nimport Foundation\n\nlet angle = 45.0 * .pi / 180.0\nlet sine = sin(angle) // C-Funktion aus math.h\nprint("Sinus von 45°:", sine)\n\n// Arbeiten mit Zeigern\nlet str = "Hallo, C!"\nstr.withCString { cString in\n    let length = strlen(cString) // C-Funktion\n    print("Stringlänge:", length)\n}
\n\n

Erstellen einer eigenen C-Bibliothek

\n\n

Angenommen

Blogs

Buchempfehlungen