将swift框架导入Objective-c项目

时间:2015-06-28 12:05:55

标签: ios objective-c swift ios-frameworks

我将swift框架导入Objective-c项目,如下所示:

@import MyFramework;

问题是我导入框架的类只能识别某些类。

被认可的班级:

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

不是的课程:

public class VeediUtils
{ ... } 

他们都是公开的,为什么第一个在工作区被识别而另一个没有?

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

@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler>

出现而另一个不

为什么?

还指出当我将swift框架导入swift项目时,同样的过程工作

4 个答案:

答案 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属性。

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

答案 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代码中

Objective-C使用者-> Swift动态框架

Xcode版本10.2.1

创建一个Swift框架

关注[Mixing Swift and Objective-C code in a project]

公开Swift API。要从Objective-C Create Swift framework

使用Swift的功能

具有Swift静态库的Object-C使用者

关注[About]

将模块导入到Objective-C客户端代码Using Swift framework

@import module_name;

[module_name]