wake-up-neo.com

Importieren von Project-Swift.h in eine Objective-C-Klasse ... Datei nicht gefunden

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:

  1. Wählen Sie in Define ModulesYES für die App aus.
  2. Stellen Sie sicher, dass der Name des Produktmoduls kein Leerzeichen enthält (siehe Abbildung unten).

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:

enter image description here


Fehler, auf die ich momentan stoße:

enter image description here

98
daspianist

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 ....

  1. Jede Klasse, die Sie für den Zugriff auf in der .h-Datei benötigen, muss eine Vorwärtsdeklaration wie diese sein

@class MySwiftClass;

  1. Wenn sich der Code NUR in der .m-Datei im selben Projekt (Modul) befindet, müssen Sie ihn mit importieren

#import "ProductModuleName-Swift.h

Link zur Apple-Dokumentation dazu

https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//Apple_ref/doc/uid/TP40014216-CH10-XID_87

116
bolnad

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.

https://developer.Apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

74
ikocel1

Wie ich es geschafft habe, Swift in Objective-c zu importieren:

  • Defines Module auf YES gesetzt (im Projekt - nicht im Ziel)
  • Produktmodulname gesetzt (am Ziel - nicht am Projekt)
  • Importieren Sie in Ihrem ViewController.m den Swift-Code mit:

    #import "MyProductModuleName-Swift.h"
    
  • Fügen Sie Ihrem Objective-c-Projekt eine Swift-Datei hinzu (Datei -> Neu -> Swift) und Xcode erstellt den Bridging-Header von Objective-C bis Swift dies ist jedoch entscheidendes funktioniert auch umgekehrt - anscheinend.

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

47
holm50

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.

10
petershine

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.

5
Josh B

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.

2
YSR fan

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 

1
Gurunath Sripad

Befolgen Sie eine Stunde mit diesem Problem und folgen Sie diesen Schritten, um zu verstehen, was fehlt:

  1. Öffnen Sie die Xcode-Voreinstellung und navigieren Sie zum DerivedData-Ordner
  2. Suchen Sie nach "Swift.h" im Finder
  3. Wenn Sie keine project-Swift.h-Datei finden können, wurde diese Datei nicht generiert. In der Regel müssen Sie @objc zu einer Ihrer Swift-Klassen hinzufügen und die App erfolgreich erstellen. Erst dann generiert Xcode diese Datei
  4. Wenn Sie die Datei "xxx-Swift.h" gefunden haben, vergewissern Sie sich, dass Ihre Importanweisung den richtigen Namen enthält.

 how-to-locate-Swift-file

1
Jakehao

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.

1
Claytog

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!

1
Artem Loginov

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".

0
opochtovy

-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)

0
yoAlex5