将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属性。
如果您之前configuration了Project与Swift集成并希望使用Swift Dynamic Framework,则必须以这种方式导入它(在{}中,必须根据您的项目放置合适的名称):
#import <{MyFramework}/{MyFrameworkMainClass}-Swift.h> #import "{YourProjectTargetName}-Swift.h"
您必须将@objc
添加到VeediUtils
类的声明中,或者使其从NSObject
inheritance。 否则它将不会被Objective-C看到。
在你的情况下, RecognizedClass
被识别,因为它是UIViewController
一个子类,它是NSObject
一个子类。