Ich möchte Swift in meinem Objective-C-Projekt verwenden. Also habe ich eine schnelle Klasse hinzugefügt:
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
Und importierte es in eine .m-Datei:
#import "MyProjectName-Swift.h"
Beim Erstellen meines Projekts wird folgende Fehlermeldung angezeigt:
Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist
HINWEIS: Unter "Build-Einstellungen-> Swift Compiler - Codegenerierung-> Objective-C-Briding-Header" wird MyProjectName-Bridging-Header.h festgelegt
Was soll ich tun, um dieses Problem zu lösen?
Jede Hilfe wird sehr geschätzt.
EDIT: Bridging-Header-Datei: #if defined (__ has_include) && __has_include () # include #endif
#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted)
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
# define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#if defined(__has_feature) && __has_feature(modules)
#endif
#pragma clang diagnostic pop
ios
objective-c
xcode
swift
user2408952
quelle
quelle
MyProjectName-Swift.h
undMyProjectName-Bridging-Header.h
arbeiten in entgegengesetzte Richtungen.MyProjectName-Swift.h
wird automatisch bereitgestellt.MyProjectName-Bridging-Header.h
wird jedoch halbautomatisch bereitgestellt, dh Sie müssen sicherstellen, dass es vorhanden ist. Sind Sie sicher, dass SieMyProjectName-Bridging-Header.h
in Ihrem Projektnavigator sehen können? Wenn nicht, erstellen Sie eine Datei mit diesem Namen und fügen Sie sie Ihrem Projekt hinzu. Überprüfen Sie dann erneut, ob der Pfad in den Build-Einstellungen korrekt ist (er sollte Ihr Projektverzeichnis enthalten :MyProjectName/MyProjectName-Bridging-Header.h
.Antworten:
Wenn die Überbrückungsdatei auf derselben Ebene wie die anderen Klassen erstellt wird, müssen Sie möglicherweise den relativen Pfad hinzufügen, wie diese Bilder zeigen. Beachten Sie hier, dass die Bridging-Datei auf derselben Ebene wie die anderen Klassen erstellt wird:
Ich habe den Namen korrekt in den Build-Einstellungen eingegeben.
Der Compiler findet die Datei jedoch nicht.
Wenn ich also den relativen Pfad vom Stamm des Projekts hinzufüge (dh ich füge hinzu
./ProjectName/BridgerFileName.h
),Jetzt wird es kompiliert und ich kann eine Methode in meiner Objective C-Klasse aufrufen:
quelle
Ich habe festgestellt, dass nach dem manuellen Erstellen der Bridging-Header-Datei und der Auswahl des Standardnamens und -speicherorts der Bridging-Header im Projektverzeichnis abgelegt wird, das sich unter dem Stammverzeichnis befindet.
Dies erfordert den folgenden Wert für die Einstellung: Ziele> [Ihr App-Ziel]> Build-Einstellungen> Swift Compiler - Codegenerierung> Objective-C-Bridging-Header :
Beachten Sie, dass Sie, wenn Ihr Projekt ein schnelles Modul (Framework) ist, wie in den Kommentaren erwähnt, möglicherweise Folgendes bevorzugen:
quelle
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
wird häufiger sein :)$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
Bis zu meinem Projektordner erhalte ich den richtigen Pfad, aber das Anhängen führt/$(PROJECT_NAME)
mich nicht zum gewünschten Pfad.Für diejenigen, die den Bridging Header entfernen
Ich ging den umgekehrten Weg wie die meisten anderen Antworten hier. Ich hatte zuvor einen Bridging Header verwendet, brauchte ihn aber nicht mehr. Nachdem ich es aus meinem Projekt gelöscht hatte, wurde der in der Frage erwähnte Fehler angezeigt. Ich habe die folgenden Schritte ausgeführt, um mein Problem zu lösen.
quelle
In Swift 4.1
Ihr Projekt haben Sie nicht
bridging-Header.h
Datei, aber Ihr Projekt hat diesen Pfad. Dazu müssen Sie diesen Pfad löschen ...Gehen Sie zur
targets
Datei und wählen SieBuild Settings
---->Swift Compiler - General
und löschen Sie diebridging-Header.h
. Folgen Sie den Screenshots unten ....Löschen Sie die
bridging-Header.h
Datei in Swift Compiler - GeneralJetzt bist du so geworden ...
quelle
So fügen Sie eine Brückendatei im Swift-Projekt hinzu
Schritt 1. Gehen Sie zu Datei> Kakao mit Objective-C-Datei hinzufügen (für temporäre Zwecke).
Schritt 2. Dann erscheint das folgende Popup
Klicken Sie nun auf die Schaltfläche Bridging Header erstellen
GESCHEHEN
SIE BRIGDE Datei in Bundle
DANK
quelle
Dies sind Schritte zum Erstellen eines Bridging-Headers.
Datei-> Neu-> iOS-> Header-Datei , Geben Sie den Namen der Bridging-Datei wie folgt ein: "yourProjectName-Bridging-Header.h"
Build-Settings-> Objective-C Bridging Header , geben Sie einfach den Namen der Bridging-Header-Datei wie "ProjectName-Bridging-Header.h" an.
HINWEIS: Die Bridging-Header-Datei sollte sich im Hauptstammordner des Projekts befinden, in dem sich die Datei ".xcodeproj" befindet. Wenn nicht, verschieben Sie die Bridging-Headerdatei in den Stammordner des Projekts. Auf diese Weise kann Xcode auf die Bridge-Datei zugreifen.
Erstellen Sie das Projekt und importieren Sie die erforderlichen Dateien in den Bridging-Header.
quelle
Für mich hat es geholfen, $ (SRCROOT) / $ (PROJECT_NAME) / vor meinem Bridging-Header-Dateipfad zu verwenden
quelle
Für mich hat es geholfen,
$(SRCROOT)
vor meinem Objective-C-Bridging-Header-Pfad zu verwenden.quelle
Folgen Sie den unteren Schritten:
Vielleicht helfen diese beiden Dinge, Ihr Problem zu lösen.
quelle
Folgendes hat bei mir funktioniert:
quelle
Manuelles Erstellen einer Bridging-Header-Datei
Löschen Sie zunächst die Bridging-Header-Datei, für die Xcode erstellt wurde. Und wählen Sie Ihr Projekt aus und gehen Sie zu> Build-Einstellungen> Suchen Sie das Schlüsselwort. Swift Compiler - Codegenerierung. Klicken Sie auf Objective-C Bridging Header und löschen Sie diesen Pfad. Bereinigen Sie jetzt Ihr Projekt.
Wählen Sie nun in der Navigationsleiste Ihr Projekt> Fenster. Wählen Sie Projekte und löschen Sie Ihre abgeleiteten Daten von dort.
Erstellen Sie nun eine neue Datei, wählen Sie die Quelle und dann die Header-Datei aus und erstellen Sie Ihre Bridging-Header-Datei. Der Dateiname muss Ihr Projektname-Bridging-Header.h sein und dann erstellt werden
Wählen Sie Ihr Projekt unter> Build-Einstellungen> Suchen Sie das Schlüsselwort. Swift Compiler - Codegenerierung. Klicken Sie auf Objective-C Bridging Header und fügen Sie nun den Pfad in diesem Objective-C Bridging Header wie projectname-Bridging-Header.h hinzu
Importieren Sie nun Ihre Klassen in eine Bridging-Header-Datei und Sie können Ihren Code einfach kompilieren.
Ihre Bridging-Header-Datei sieht folgendermaßen aus, wenn Sie Ihre Datei manuell erstellen.
quelle
Was mir geholfen hat, war, die Datei manuell in den in einer Fehlermeldung angegebenen Pfad zu verschieben. So:
quelle