Ich habe eine Bibliothek in Swift geschrieben und konnte sie nicht in mein aktuelles Projekt importieren, das in Objective-C geschrieben wurde.
Gibt es Möglichkeiten, es zu importieren?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
objective-c
import
swift
Viktor Radchenko
quelle
quelle
Antworten:
Sie müssen importieren
TargetName-Swift.h
. Beachten Sie, dass es sich um den Zielnamen handelt. Die anderen Antworten machen den Fehler, den Klassennamen zu verwenden.Diese einzelne Datei ist ein automatisch generierter Header, der Objective-C-Schnittstellen für alle Swift-Klassen in Ihrem Projekt definiert, die entweder mit Anmerkungen versehen sind
@objc
oder von denen sie erbenNSObject
.Überlegungen:
Wenn Ihr Zielname Leerzeichen enthält, ersetzen Sie diese durch Unterstriche (z. B.
My Project
wirdMy_Project-Swift.h
)Wenn Ihr Ziel ein Framework ist, müssen Sie es importieren
<TargetName/TargetName-Swift.h>
Stellen Sie sicher, dass Ihre Swift-Datei Mitglied des Ziels ist
quelle
Anweisungen von der Apple-Website:
Revision:
Sie können "ProductName-Swift.h" nur in .m-Dateien importieren.
quelle
NSObject
!!! Sie können nicht einfach einclass Blah
schnelles deklarieren und es funktionieren lassen. es muss seinclass Blah : NSObject
Folgendes ist zu tun:
Erstellen Sie ein neues Projekt in Objective-C
Erstellen Sie eine neue
.swift
DateiKlicken Sie auf Ihre Xcode-Projektdatei
Klicken Sie auf Build Settings
Suchen Sie die Suchleiste und suchen Sie nach Defines Module .
Ändern Sie den Wert in Ja .
Suchen Sie nach dem Namen des Produktmoduls .
Ändern Sie den Wert in den Namen Ihres Projekts.
Fügen Sie im App-Delegaten Folgendes hinzu:
#import "YourProjectName-Swift.h"
Hinweis: Wann immer Sie Ihre Swift-Datei verwenden möchten, müssen Sie folgende Zeile importieren:
#import "YourProjectName-Swift.h"
quelle
Defines module
inBuild settings
zu ändern ,Yes
ist das, was für mich behoben wurde!YourProjectName
in#import "YourProjectName-Swift.h"
der Name des Projekts aus Schritt 8 enthalten ist. Nützlich, wenn Ihr Projektname Sonderzeichen enthält und Sie nicht sicher sind, wie genau Sie ihn formatieren sollen.Wenn Sie Cocoapods verwenden und versuchen, einen Swift-Pod in einem ObjC-Projekt zu verwenden, können Sie einfach Folgendes tun:
quelle
Gehen Sie zu Build-Einstellungen in Ihrer Projektdatei und suchen Sie nach "Objective-C Generated Interface Header Name" . Der Wert dieser Eigenschaft ist der Name, den Sie einschließen sollten.
Wenn Ihre Eigenschaft "Name des Produktmoduls" (die Eigenschaft, von der die obige Eigenschaft standardmäßig abhängt) davon abhängt, ob Sie für test / debug / release / etc kompilieren (wie in meinem Fall), machen Sie diese Eigenschaft davon unabhängig Variation durch Festlegen eines benutzerdefinierten Namens.
quelle
Das Importieren einer
Swift
DateiObjective-c
kann diesen Fehler verursachen, wenn er nichtimport
ordnungsgemäß ausgeführt wird.HINWEIS: Sie müssen Swift-Dateien nicht extern importieren, sondern nur eine Datei importieren, die sich um Swift-Dateien kümmert.
Wenn Sie eine Swift-Datei in einem Objective-C-Projekt erstellt / kopiert haben . Es hätte automatisch einen Bridging-Header erstellt.
Überprüfen Sie
Objective-C Generated Interface Header Name
beiTargets -> Build Settings
.Basierend auf oben werde ich importieren,
KJExpandable-Swift.h
wie es ist.Ihr wird sein
TargetName-Swift.h
, woTargetName
sich basierend auf Ihrem Projektnamen oder einem anderen Ziel, das Sie möglicherweise hinzugefügt haben und das darauf ausgeführt wird, unterscheidet.Wie unter meinem Ziel ist
KJExpandable
, so ist esKJExpandable-Swift.h
quelle
Erster Schritt:-
Wählen Sie Projektziel -> Build-Einstellung -> Suchen ('Definieren') -> Modulaktualisierungswert definieren Nein zu Ja
"Definiert das Modul": JA .
"Immer schnelle Standardbibliotheken einbetten": JA .
"Objective-C-Kompatibilitätsheader installieren": JA .
Zweiter Schritt:-
Fügen Sie die Swift-Dateiklasse in Objective C ".h" -Datei wie folgt hinzu
Importieren Sie 'ProjectName (Ihr Projektname) -Swift.h' in die Datei Objective C ".m"
quelle
Es gibt eine Einschränkung, wenn Sie Swift-Code innerhalb desselben Frameworks in Ihre Objective-C-Dateien importieren . Sie müssen den Framework-Namen und die spitzen Klammern angeben:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
Hier ist die Build-Einstellung "Product Module Name" (PRODUCT_NAME = MyFramework
).Das einfache Hinzufügen
#import "MyFramework-Swift.h"
funktioniert nicht. Wenn Sie das Verzeichnis der erstellten Produkte überprüfen (bevor ein solches#import
hinzugefügt wird, sodass Sie mindestens eine erfolgreiche Erstellung mit etwas Swift-Code im Ziel hatten), sollte die Datei weiterhinMyFramework-Swift.h
imHeaders
Verzeichnis angezeigt werden.quelle
Wenn Sie ein Projekt in Swift 4 erstellt und anschließend Objective-C-Dateien hinzugefügt haben, gehen Sie folgendermaßen vor:
Referenz: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
quelle
Lesen Sie die Pre-Release-Hinweise zu Swift und Objective C im selben Projekt
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75
Sie sollten importieren
quelle
The name of this header is your product module name followed by adding "-Swift.h".
Es ist also nicht der Klassenname, wie Sie ihn geschrieben haben, sondern der Name Ihres Produktmoduls, der dafür sorgt, dass alle schnellen Dateien importiert werden, nicht nur eine bestimmteSuchen Sie in den Build-Einstellungen des Ziels, das Sie erstellen möchten (sagen wir, es ist ) nach "Objective-C Generated Interface Header Name"
MyApp-Swift.h
und importieren Sie den Wert dieser Einstellung (#import "MyApp-Swift.h"
) in die Quelldatei, auf die Sie zugreifen möchten Ihre Swift-APIs.Der Standardwert für dieses Feld ist
$(SWIFT_MODULE_NAME)-Swift.h
. Sie können es sehen, wenn Sie in das Wertefeld der Einstellung "Objective-C Generated Interface Header Name" doppelklicken.Wenn Ihr Modulname Bindestriche enthält (sagen wir, es ist
My-App
), werden$(SWIFT_MODULE_NAME)
alle Bindestriche durch Unterstriche ersetzt. Dann müssen Sie hinzufügen#import "My_App-Swift.h"
.quelle
Wenn Sie die Swift- Datei in der Objective-C- Klasse verwenden möchten , können Sie ab Xcode 8 die folgenden Schritte ausführen:
Wenn Sie das Projekt in Objective-C erstellt haben:
Kompilieren Sie es und wenn es einen Linker-Fehler erzeugt wie: Kompiliert mit einer neueren Version der Swift-Sprache (3.0) als frühere Dateien (2.0) für die Architektur x86_64 oder armv 7
Nehmen Sie noch eine Änderung an Ihrem vor
Erstellen und ausführen.
quelle
Seien Sie vorsichtig mit Bindestrichen und Unterstrichen, sie können verwechselt werden und Ihr Projektname und Zielname stimmen nicht mit SWIFT_MODULE_NAME überein.
quelle
Sie werden sehen, wenn Sie über die Tastatur #import <eingeben und Xcode Sie automatisch darauf hinweist.
quelle
Suchen Sie die .PCH-Datei im Projekt. und dann hinzufügen
#import "YourProjectName-Swift.h"
Dies importiert die Klassenheader. Damit Sie nicht in eine bestimmte Datei importieren müssen.quelle