将swift框架导入到一个Objective-C项目中

我正在将swift框架导入到这样的Objective-C项目中:

@import MyFramework; 

问题是只有一些类被我正在导入框架的类所识别。

被认可的class级:

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

不是的类:

 public class VeediUtils { ... } 

他们都是公开的,所以为什么第一个在工作空间中被识别,而另一个呢?

另外我在头文件MyFramework-Swift.h中看到一个类

 @interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler> 

出现而另一个不

这是为什么?

同样要指出的是,当我正在向swift项目导入swift框架时,这个相同的程序工作

要访问一个objc中的swift类,这不是从NSObjectinheritance的,你需要:

@objc公共类VeediUtils

Swift类或协议必须使用@objc属性标记为可在Objective-C中访问和使用。 这个属性告诉编译器,这段Swift代码可以从Objective-C访问。 如果你的Swift类是一个Objective-C类的后代,编译器会自动为你添加@objc属性。

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

如果您之前configuration了Project与Swift集成并希望使用Swift Dynamic Framework,则必须以这种方式导入它(在{}中,必须根据您的项目放置合适的名称):

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

您必须将@objc添加到VeediUtils类的声明中,或者使其从NSObjectinheritance。 否则它将不会被Objective-C看到。

在你的情况下, RecognizedClass被识别,因为它是UIViewController一个子类,它是NSObject一个子类。