将Swift框架导入Objective-C项目

22

我正在将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个回答

34
如果您之前已经配置了与Swift集成的项目,并希望使用Swift动态框架,则必须按照以下方式导入它(根据您的项目替换{value}为适当的名称):
#import <{MyFramework}/{MyFrameworkMainClass}-Swift.h>  
#import "{YourProjectTargetName}-Swift.h"

编辑:

如果您的框架的Defines Module选项设置为true,那么您可以像这样导入它:

@import MyFramework;

我无法使用PaperOnboarding: #import "paper-onboarding/PaperOnboarding-Swift-h"无效。 - famfamfam

30

要在 Objective-C 中访问一个未继承自 NSObject 的 Swift 类,您需要:

@objc public class 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


4
您需要在 VeediUtils 类的声明中添加 @objc,或使其继承自 NSObject。否则,它将对 Objective-C 不可见。
在您的情况下,RecognizedClass 被识别是因为它是 UIViewController 的子类,而 UIViewControllerNSObject 的子类。

迟早 UIViewController 也会成为一个 Swift 类。 - Juan Boero

3

在Objective-C中使用Swift类

如果您要在一个应用程序目标中导入代码(混合使用Objective-C和Swift),则应使用下一行导入语句#import "<#YourProjectName#>-Swift.h" 将Swift代码暴露给Objective-C代码[在项目中混合使用Swift和Objective-C代码]

本文将介绍如何将Swift框架导入到Objective-C代码中

Objective-C消费者 -> Swift动态框架

Xcode版本为10.2.1

创建Swift框架

请按照创建Swift框架的步骤进行操作

暴露Swift API。要从Objective-C中使用Swift的函数[关于]

Objective-C消费者

请按照使用Swift框架的步骤进行操作

将模块导入Objective-C客户端代码[模块名称]

@import module_name;

[More examples here]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接