Swift in Objective-C: Anleitung zum Import für hybride Projekte

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

So importieren Sie Swift-Code in Objective-C: Schritt-für-Schritt-Anleitung mit echten Beispielen



Haben Sie sich jemals in einer Situation befunden, in der Sie ein neues Swift-Modul zu einem alten, guten Objective-C-Projekt hinzufügen mussten? Oder migriert Ihr Team vielleicht schrittweise von Objective-C zu Swift, aber Sie müssen vorerst noch im hybriden Modus arbeiten? Wenn ja, sind Sie hier genau richtig. Die Frage „How can I import Swift code to Objective-C?“ ist eine der beliebtesten auf Stack Overflow (Zehntausende von Aufrufen), und das ist nicht verwunderlich: Selbst erfahrene Entwickler sind manchmal unsicher bei der Einrichtung der Brücke zwischen den beiden Sprachen.



In diesem Artikel erklären wir, wie Sie Swift-Code korrekt in Objective-C importieren, welche Fallstricke Sie erwarten und wie Sie Ihr Projekt nicht in ein Rätsel verwandeln. Los geht's!



Warum leben Swift und Objective-C immer noch zusammen?



Viele denken, dass mit dem Aufkommen von Swift alle Objective-C aufgegeben und auf die neue Sprache umgestiegen sind. Die Realität ist komplexer. Tausende großer Projekte (einschließlich Apps von Banken, sozialen Netzwerken und Unternehmenssystemen) sind in Objective-C geschrieben, und sie vollständig umzuschreiben ist eine Aufgabe für Jahre. Daher hat Apple einen Mechanismus für die Interaktion vorgesehen: Sie können neue Funktionen in Swift schreiben, während der alte Code in Objective-C bleibt.



Das Hauptproblem: Swift und Objective-C sind verschiedene Welten. Swift wird in ein eigenes Binärformat kompiliert, Objective-C in seines. Damit sie sich gegenseitig „sehen“ können, ist eine spezielle Brücke erforderlich – ein Bridging Header für den Import von Objective-C in Swift und eine automatisch generierte Header-Datei für den Import von Swift in Objective-C.



Funktionsweise: Wie Swift Objective-C sieht und umgekehrt



Lassen Sie uns gleich die Richtung klären:



  • Objective-C → Swift: Verwenden Sie die generierte Datei ProductModuleName-Swift.h (wobei ProductModuleName der Name Ihres Moduls ist).
  • Swift → Objective-C: Verwenden Sie den Bridging Header (ProjectName-Bridging-Header.h).


Heute interessiert uns die erste Variante. Für ein vollständiges Verständnis ist es jedoch hilfreich, beide zu kennen.



Schritt 1: Projektkonfiguration für die Zusammenarbeit



Bevor Sie Swift-Code in Objective-C importieren, stellen Sie sicher, dass Ihr Projekt richtig konfiguriert ist. Wenn Sie ein Projekt von Grund auf neu erstellen und sofort eine hybride Architektur planen, ist alles einfach. Wenn das Projekt bereits in Objective-C existiert, müssen Sie die Swift-Unterstützung hinzufügen.



Überprüfen Sie die Build Settings



Öffnen Sie die Einstellungen Ihres Targets in Xcode und suchen Sie den Parameter „Defines Module“. Er muss auf Yes gesetzt sein. Wenn er nicht vorhanden ist, fügen Sie ihn manuell hinzu:



// Build Settings → Packaging → Defines Module = YES


Suchen Sie dann „Product Module Name“ – dies ist der Name, der in der generierten Header-Datei verwendet wird. Standardmäßig stimmt er mit dem Projektnamen überein, Sie können ihn jedoch ändern (z. B. MyApp).



Erstellen Sie einen Bridging Header (falls nicht vorhanden)



Wenn Sie zum ersten Mal eine Swift-Datei zu einem Objective-C-Projekt hinzufügen, bietet Xcode an, einen Bridging Header zu erstellen. Stimmen Sie zu. Wenn Sie diesen Moment verpasst haben, erstellen Sie die Datei manuell: New File → Header File und nennen Sie sie YourProjectName-Bridging-Header.h. Geben Sie dann den Pfad in den Einstellungen an:



// Build Settings → Swift Compiler - General → Objective-C Bridging Header// Beispiel: $(SRCROOT)/$(PROJECT_NAME)/YourProjectName-Bridging-Header.h


Schritt 2: Schreiben einer Swift-Klasse, die von Objective-C aus zugänglich ist



Nicht jede Swift-Klasse wird automatisch von Objective-C „gesehen“. Es gibt einige zwingende Anforderungen: