Ich habe ein Projekt, das in Objective-C gestartet wurde, und ich versuche, Swift-Code in die gleichen Klassendateien zu importieren, in die ich zuvor Objective-C geschrieben habe.
Ich habe Apple docs zur Verwendung von Swift und Objective-C in demselben Projekt sowie SO question wie folgt konsultiert, aber immer noch keinen Erfolg: Ich bekomme die Datei weiterhin nicht Fehler gefunden, nachdem #import "NewTestApp-Swift.h"
eingegeben wurde (NewTestApp
ist der Name des Produkts und des Moduls).
Folgendes habe ich bisher gemacht:
Define Modules
YES
für die App aus.Ich habe versucht, #import "NewTestApp-Swift.h"
in ViewController.m
, ViewController.h
und AppDelegate.m
zu verwenden, aber keiner von ihnen hat funktioniert.
Was mache ich sonst falsch? Danke für Ihre Hilfe.
Screenshot der Einstellungen:
Fehler, auf die ich momentan stoße:
Ich hatte das gleiche Problem und konnte mein Projekt nicht dazu bringen, Swift in obj-c-Klassen zu importieren. Verwendung von Xcode 6 (sollte für Xcode 6+ funktionieren) und konnte dies auf diese Weise tun ....
@class MySwiftClass;
#import "ProductModuleName-Swift.h
Link zur Apple-Dokumentation dazu
Wenn sich der Swift-Code in einem Modul befindet (wie in Ihrem Fall):
#import <ProductName/ProductModuleName-Swift.h>
Wenn sich der Swift-Code im Projekt befindet (gemischte Swift und ObjC):
#import <ProductModuleName-Swift.h>
In Ihrem Fall müssen Sie diese Zeile in die * .m-Datei einfügen:
#import <NewTestApp/NewTestApp-Swift.h>
WICHTIG: Betrachten Sie das "<" in der Importanweisung.
Wie ich es geschafft habe, Swift in Objective-c zu importieren:
Importieren Sie in Ihrem ViewController.m den Swift-Code mit:
#import "MyProductModuleName-Swift.h"
Für das letzte Stück in diesem Rätsel dank Swiftoverload, das mich dazu gebracht hat, eine Swift-Datei über die Xcode-GUI hinzuzufügen und nicht nur vorhandene Swift-Dateien in mein Projekt zu ziehen und dort abzulegen, damit sie funktioniert: http: // nikolakirev.com/blog/using-Swift-in-objective-c-project
Wenn Sie Xcode 8.2.1 verwenden und wenn Sie Project> Build Settings> Objective-C Generated Interface Header Name sehen, zeigt es nur eine Header-Datei namens Product - Swift.h
Das bedeutet, dass Sie nicht die einzelnen Module separat von der Objective-C .m-Datei importieren, sondern mit der einzelnen Datei "Swift.h" nur eine Product -Swift.h importieren, die alle Swift-Module zusammenfasst.
Dasselbe Problem hatte ich, als ich nach traditionellen Methoden suchte, um Module separat zu importieren. Die aktuelle Version von Xcode und Swift 3 änderte jedoch, dass nur ein Header für den Import aller Module verwendet wurde.
Ich hatte Probleme beim Importieren von Swift in ein Objective-C-Projekt. Am Ende habe ich im Ordner Derivied Data nachgeschaut, was Xcode 7 generierte. Der Dateiname war völlig anders als ich erwartet hatte.
Sobald ich den Dateinamen hatte, importierte ich diesen und das Projekt konnte erstellt werden.
DEFINE-MODULE DEFINIEREN: JA Und "ProjectName-Swift.h" in .m-Datei der Obj-C-Klasse importieren
Dies funktionierte für mich, um auf Swift-Klassen in Obj-c zuzugreifen.
Während der Entwicklung kann es vorkommen, dass Sie über eine Swift-Klasse verfügen, die nicht vollständig implementiert ist, wodurch möglicherweise Syntaxfehler auftreten. Die Swift-Header-Datei kann nur verwendet werden, wenn alle Swift-Dateien fehlerfrei sind.
Stellen Sie sicher, dass in den Swift-Dateien keine Syntaxfehler vorhanden sind, und versuchen Sie dann, den Swift-Header in die object-c-Datei zu importieren
Befolgen Sie eine Stunde mit diesem Problem und folgen Sie diesen Schritten, um zu verstehen, was fehlt:
Importieren der Header-Datei, d. H.
#import "<ProjectName>-Swift.h"
in der .h-Datei wurde ein Fehler generiert, der Folgendes angibt:
-Swift.h 'Datei nicht gefunden
und der Build ist fehlgeschlagen.
Verwenden Sie stattdessen:
#import "<ProjectName>-Swift.h"
innerhalb der .m-Datei, und obwohl derselbe Fehler auftritt, wird das Ausführen des Projekts trotzdem unterdrückt.
Die Swift-Klassen sind dann in der .m-Datei verfügbar.
Hatte das gleiche Problem mit meinem Team gehabt, als er mit git an einem Projekt arbeitete. Ein Entwickler hat Xcode nicht auf die letzte Version (7.3) aktualisiert, die für die neueste Swift 2.2-Version erforderlich war. Der Compiler hat also die neue Swift-Syntax nicht erkannt und konnte keine Schnittstelle für die Swift-Bibliothek (projectname-Swift.h) erstellen. Prüfen Sie, ob die Xcode-Version die neueste ist!
Ich habe das Problem mit dem Namen des Projekts (Ziel) konfrontiert. Es enthielt das Symbol "-". Die Entscheidung war also die nächste: Wenn der Name des Projekts "Test-App" ist, dann ist der Name der importierten Klasse "Test_App-Swift.h".
-Swift.h
sollte von Xcode automatisch erstellt werden, wenn Swift Code eine API über @objc
oder @objcMembers
verfügbar macht.
Normalerweise sieht ein Ort so aus
~/Library/Developer/Xcode/DerivedData/
ProductModuleName-foo/
Build/
Intermediates.noindex/
ProductModuleName.build/
Debug-iphoneos/
ProductModuleName.build/
DerivedSources/
ProductModuleName-Swift.h
Es kann geändert werden durch
Project editor -> select a target -> Build Settings -> Per-configuration Intermediate Build Files Path
Standardmäßig ist der Wert $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)