Swift importiert Typedef nicht aus Objective-C Header

9

Es scheint, dass Swift einen Typedef in einem Objective-C-Header nicht erkennt, da der folgende Fehler auftritt:

Es wurde keine benutzerdefinierte Konvertierung vom Typ 'MMDrawerControllerDrawerVisualStateBlock!' gefunden. (MMDrawerController !, MMDrawerSide, CGFloat) - & gt; Void '

Ich benutze den MMDrawerController , der in Objective-C geschrieben ist, mein eigener Code ist jedoch in Swift.

Das Typedef sieht so aus:

%Vor%

Hier finden Sie weitere Code-Snippets zur besseren Übersicht:

AppDelegate.swift

%Vor%

MMDrawerController.h

%Vor%

MMDrawerVisualState.h

%Vor%

Modul-Bridging-Header.h

%Vor%

Wenn ich dies erstelle, erhalte ich einen Fehler in meinem AppDelegate für den Ausdruck mit setDrawerVisualStateBlock , obwohl es in MMDrawerController.h ein typedef gibt:

Ist das ein Fehler (weil es auf Objective-C gut funktioniert)? Oder kennt jemand eine Idee, wie man damit umgehen soll? Hilfe wird sehr geschätzt, danke!

    
boeqqsh 16.08.2014, 08:46
quelle

2 Antworten

3

Objective-C typedef-Deklaration (z. B. in MMDrawerController.h):

%Vor%

In Swift wird es folgendermaßen importiert:

%Vor%

So können Sie diese Syntax in Swift verwenden:

%Vor%

Zur Verwendung mmDrawerViewController.setDrawerVisualStateBlock () probiere

aus %Vor%     
Mao 11.09.2014 14:28
quelle
1

Der Grund ist, dass Sie auf MMDrawerSide drawerSide zugreifen, aber wahrscheinlich nicht die Datei importieren, die MMDrawerSide in Ihrem Bridging-Header deklariert.

Wenn eine Objective-C-Methodendeklaration auf eine Klasse zugreift, die nicht in Ihren Bridging-Header importiert wird, importiert Swift diese Methode nicht und erkennt sie auch nicht.

Also, wenn Sie einen Typdef in Objective-C wie folgt haben:

typedef void (^someBlock)(MMSomeClass *someInstance);

Dann müssen Sie sicherstellen, dass MMSomeClass in Ihren Bridging-Header importiert wurde.

    
Snowman 07.10.2015 18:29
quelle