2015-06-28 5 views
10

ich swift Rahmen in Objective-c Projekt wie diese am Import:Import schnelle Rahmen in ein Objective-C Projekt

@import MyFramework; 

Das Problem ist, dass nur einige der Klassen von der Klasse anerkannt i Import ist die Rahmen.

Die Klasse, die erkannt wird:

public class RecognizedClass:UIViewController, WKNavigationDelegate, WKScriptMessageHandle 
{ ... } 

Die Klasse, die nicht ist:

public class VeediUtils 
{ ... } 

Sie sind beide öffentlich so, warum die erste nicht in den Arbeitsbereich und die andere erkannt wird?

Auch sehe ich in der Header-Datei MyFramework-Swift.h, dass eine Klasse

@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler> 

erscheinen, während das andere tun sie nicht

Warum das so ist?

auch darauf hinweisen, dass diese gleichen Verfahren arbeiten, wenn ich swift Rahmen rasche Projekt

Antwort

15

Um einen schnellen Zugriff auf Klasse in objc bin importieren, das nicht von NSObject Sie benötigen vererbt wird:

@objc Öffentlichkeit Klasse VeediUtils

Eine Swift-Klasse oder ein Swift-Protokoll muss mit dem @objc-Attribut gekennzeichnet sein, damit es in Objective-C verfügbar und verwendbar ist. Dieses Attribut teilt dem Compiler mit, dass auf diesen Teil des Swift-Codes von Objective-C aus zugegriffen werden kann. Wenn Ihre Swift-Klasse ein Nachkomme einer Objective-C-Klasse ist, fügt der Compiler automatisch das @objc-Attribut für Sie hinzu.

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

4

Sie haben @objc auf die Erklärung der VeediUtils Klasse hinzuzufügen, oder es von NSObject erben zu machen. Ansonsten ist es für Objective-C nicht sichtbar.

In Ihrem Fall wird RecognizedClass erkannt, weil es eine Unterklasse von UIViewController ist, die eine Unterklasse von NSObject ist.

19

Wenn Sie zuvor Projekt konfiguriert mit Swift für die Integration und wollen Swift dynamische Framework verwenden, haben Sie es wie auf diese Weise importieren (in {} Sie ist abhängig von Ihrem Projekt entsprechenden Namen zu setzen haben):

#import <{MyFramework}/{MyFrameworkMainClass}-Swift.h> 
#import "{YourProjectTargetName}-Swift.h" 
+0

vielen dank für tihs –

Verwandte Themen