如何在我的Swift项目中使用Objective-C项目

9
注意:我知道如何从Swift调用Objective-C代码,但我不知道以下内容,
我想在我的项目中使用EsptouchForIOS的演示文稿。该演示文稿是用OC编写的,它有一个故事板和控制器。我想知道如何将演示文稿集成到我的Swift项目中,并在我的Swift项目中使用该故事板及其控制器。

故事板不依赖于语言。您可以从Objective-C或Swift中使用它们。 - Tamás Sengel
@the4kman 谢谢。我想知道如何将 OC 演示集成到我的 Swift 项目中。 - LF00
您需要创建一个名为“ProjectName-Bridging-Header.h”的Objective-C桥接头文件,其中“ProjectName”是您的Swift项目名称,在该文件中导入您想要暴露给Swift的Objective-C头文件。 - Rahul Kumar
3个回答

14

我将从最开始开始写。假设您在Objective-C中有一个项目,现在想要在Swift中继续开发项目。请按照以下指南操作:(这适用于您的特定需求)

首先选择从文件->新建->文件添加新文件。在此过程中,选择您的语言为Swift。在这里的最后一步,您将被提示创建桥接头文件。选择它:

Bridging Header creation

现在构建您的项目一次(+B)。您可能会收到如下错误:

iOS SDK version error message

将您的目标最小部署更改为Swift支持的版本。(示例在下面的屏幕截图中) Changing deployment target

在Swift文件中使用Objective-C资源:

现在您已经在项目中有一个ProjectName-Bridging-Header.h文件。如果您想在Swift文件中使用任何Objective-C类,则只需将该类的头文件包含在此桥接头文件中即可。例如,在此项目中,您拥有ESP_NetUtilESPViewController类以及它们的头文件。您希望将它们暴露给Swift并稍后在Swift代码中使用它们。因此,请在此桥接头文件中导入它们:

Importing Objective-C header files in Bridging Header

再次构建。现在您可以转到Swift文件。并像使用任何资源一样使用Objective-C类。见:

Objective-C classes used in Swift

注意:您必须在桥接头文件中公开所有的类头文件(您打算在Swift中稍后使用)

在Objective-C文件中使用Swift资源:

现在您可能会想,我已经成功地在Swift中使用了Objective-C资源。反之呢?是的!您也可以做相反的事情。找到您的Target->Build Settings->Swift Compiler - General->Objective-C Generated Interface Header Name。这是您将在Objective-C类中用于任何SwiftObjective-C互操作性的头文件。要了解更多信息,请查看此处

Objective-C Generated Interface Header Name

现在,在任何一个Objective-C类中,导入该接口头文件并在Objective-C代码中使用Swift资源:

Import and using Swift resource in Objective-C

您可以从官方苹果文档中获得更多理解。

您可以查看链接项目的已解决版本 此处,具有Objective-C-Swift互操作性。


谢谢。我认为这会更容易。 - Piotr Wasilewicz

2

2
根据您的问题,您已经使用如何从Swift调用Objective-C代码在Swift项目中添加了一个Objective C桥接。
现在,导入您想要在Swift文件中直接使用的Objective-C源代码(演示项目)的所有头文件(.h文件)。
例如,您的演示项目中有EsptouchForIOS以下头文件(扩展名为.h的文件)。 ESPAppDelegate.h, ESPDataCode.h, ESPTouchDelegate.h 在您的桥接中导入一个头文件,您想在Swift代码中使用它。假设在您的Swift代码中,您想要触摸代理ESPTouchDelegate,那么请写:
#import "ESPTouchDelegate.h"

这是您的演示集成在我的测试Swift项目中的快照,使用了桥接。

enter image description here

"和导入语句。"

enter image description here

现在,有一个 Objective-C 文件中的函数/方法 getValue

enter image description here

这是在 Swift 项目/文件中使用/访问的。

enter image description here

同样地,您可以在桥接文件中导入任意数量的文件(源文件头文件),并在 Swift 中使用相同的文件(源代码)。

我真正关心的是如何在Swift项目中使用OC项目的Storyboard和Controller。这样我就不需要在Swift项目中为Storyboard编写样式和事件操作了。抱歉,我是iOS的新手,我不知道这是否可行。谢谢。 - LF00

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