我将swift框架导入Objective-c项目,如下所示:
@import MyFramework;
问题是我导入框架的类只能识别某些类。
被认可的班级:
public class RecognizedClass:UIViewController, WKNavigationDelegate, WKScriptMessageHandle
{ ... }
不是的课程:
public class VeediUtils
{ ... }
他们都是公开的,为什么第一个在工作区被识别而另一个没有?
另外我在头文件MyFramework-Swift.h中看到一个类
@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler>
出现而另一个不
为什么?
还指出当我将swift框架导入swift项目时,同样的过程工作
答案 0 :(得分:28)
如果您之前已将Project配置为与Swift集成并希望使用Swift Dynamic Framework,则必须以这种方式导入它(根据您的项目将{value}替换为适当的名称):
LIKE
答案 1 :(得分:23)
要访问objc中的swift类,不需要继承自NSObject:
@objc public class VeediUtils
Swift类或协议必须使用@objc属性进行标记,以便在Objective-C中可访问和使用。该属性告诉编译器可以从Objective-C访问这段Swift代码。如果您的Swift类是Objective-C类的后代,编译器会自动为您添加@objc属性。
答案 2 :(得分:4)
您必须将@objc
添加到VeediUtils
类的声明中,或使其继承自NSObject
。否则,Objective-C将无法看到它。
在您的情况下,RecognizedClass
被识别,因为它是UIViewController
的子类,它是NSObject
的子类。
答案 3 :(得分:1)
在Objective-C中使用Swift类
如果要在应用程序目标中导入代码(在一个项目中与Objective-C和Swift混合),则应使用下一个导入行#import "<#YourProjectName#>-Swift.h"
将Swift代码暴露给Objective-C代码{{3} }
在这篇文章中,我将描述如何将Swift框架导入到Objective-C代码中
Xcode版本10.2.1
关注[Mixing Swift and Objective-C code in a project]
公开Swift API。要从Objective-C Create Swift framework
关注[About]
将模块导入到Objective-C客户端代码Using Swift framework
@import module_name;