Ich habe eine CustomViewController-Klasse, die in Swift geschrieben wurde, und eine CustomNavigationController-Klasse, die in Objective C geschrieben wurde. Ich versuche, meinen CustomNavigationController als Eigenschaft zu meinem CustomViewController hinzuzufügen. Ich habe #import "CustomNavigationController.h"
zu meinem Bridging-Header hinzugefügt.
In meinem CustomViewController habe ich:
class CustomViewController: UIViewController {
var navController: CustomNavigationController?
...
//init methods
...
override func viewDidLoad() {
super.viewDidLoad()
//Set up Navigation Controller
navController = self.storyboard.instantiateViewControllerWithIdentifier("CustomNavigationController") as CustomNavigationController!
}
Es gibt keine Fehler, bis ich versuche zu bauen und auszuführen ... Ich bekomme einen unbekannten Typnamen "CustomNavigationController"; meinten Sie "UINavigationController"?
Weiß jemand warum es den Typ nicht erkennt?
In Ihrem Objective-C-Code importieren Sie irgendwo den automatisch generierten -Swift.h
-Header. Fügen Sie in derselben Zeile vor dieser #import
-Zeile #import "CustomNavigationController.h"
ein. Die Reihenfolge dieser beiden #import
-Anweisungen ist entscheidend!
Dadurch wird das Problem gelöst, indem sichergestellt wird, dass sich CustomNavigationController vor dem automatisch generierten -Swift.h
-Header im Namespace befindet. Daher wird letzterer über den ersteren Bescheid wissen, und alles wird gut.
Dies ist etwas ärgerlich, wenn diese Objective-C-Klasse nicht über CustomNavigationController informiert werden musste. Sie löst jedoch das Problem und kann mit Ihrem Hybridprojekt weiterarbeiten.
Sieht aus, als würde die generierte ProjectName-Swift.h
-Headerdatei den Inhalt von ProjectName-Bridging-Header.h
nicht automatisch enthalten. Dies hat zur Folge, dass alle Typen, die vor dem Importieren von ProjectName-Swift.h
noch nicht deklariert wurden, den Unknown type name
-Fehler im Compiler auslösen. Das scheint ein Fehler zu sein.
Mein Workaround bestand darin, eine alternative Version von ProjectName-Swift.h
zu erstellen, die Forward die Klassen deklariert, die die Fehler verursachen, und dann ProjectName-Swifth.h
importiert. Ich habe es ProjectName-Swift-Fixed.h
genannt. Für mich sah ProjectName-Swift-Fixed.h
so aus:
// ProjectName-Swift-Fixed.h
@class CustomViewController;
#import "ProjectName-Swift.h"
Dann, überall im Code, wo ich #include "ProjectName-Swift.h"
hatte, habe ich ihn durch #include "ProjectName-Swift-Fixed.h"
ersetzt.
Falls Sie das Problem nicht beheben können, indem Sie die Reihenfolge der #import
-Anweisungen gemäß den obigen Antworten ändern, kann es sinnvoll sein, die Dateien in Ihrem ProjectName-Bridging-Header.h
auf fehlende Framework-Importe zu prüfen.
In meinem Fall hatte ich eine Klasse in der Überbrückungsheaderdatei, die UIImage
in einer ihrer Methoden verwendete. Als mein Projekt nur aus Objective-C bestand, funktionierte es einwandfrei, aber als ich Swift diesen Header offenlegte, musste ich #import <UIKit/UIKit.h>
hinzufügen, um den Fehler zu beheben.
Versuche dies:
navController = self.storyboard.instantiateViewControllerWithIdentifier("CustomNavigationController") as? CustomNavigationController
Ich bin auf dieselbe Situation gestoßen. In meinem Fall wurden die Fehler nach der Aktualisierung der Swift-Version auf 3.0 in alle Ziele von Bearbeiten> Konvertieren> In Aktuelle Swift-Syntax behoben. Ich hoffe es hilft