在Swift中,如何调用Objective-C代码?

苹果提到它们可以共存于一个应用程序中,但这是否意味着人们可以在技术上重用Objective-C中创建的旧类,同时在Swift中构建新类?


当前回答

我还想补充一点:

我非常感谢@Logan的回答。创建桥文件和设置有很大帮助。

但是在做了所有这些步骤之后,我仍然没有在Swift中获得Objective-C类。

我使用cocoapods库并将其集成到我的项目中。也就是豆荚"pop"。

因此,如果你在Swift中使用Objective-C pod,那么可能有一个机会,你不能获得或导入类到Swift中。

你要做的一件简单的事情是:

转到<YOUR-PROJECT>-Bridging-Header文件和 将语句#import <ObjC_Framework>替换为@import ObjC_Framework

例如:(Pop library)

取代

#import <pop/POP.h>

with

@import pop;

当#import无效时使用clang import。

其他回答

使用objective-c的双向方法

1

在Xcode Project中创建bridge-header.h文件 在bridge-Header文件中导入.h文件 在Build设置中设置bridge-Header的路径。 清理项目

2

在项目中创建objective-c文件(它会自动在Build Settings中为您设置路径) 在bridge-Header文件中导入.h文件

现在可以开始了 谢谢

我写了一个简单的Xcode 6项目,展示了如何混合c++, Objective-C和Swift代码:

https://github.com/romitagl/shared/tree/master/C-ObjC-Swift/Performance_Console

特别地,这个例子调用了Swift中的Objective-C和c++函数。

关键是创建一个共享头文件Project-Bridging-Header.h,并将Objective-C头文件放在那里。

请下载该项目作为完整的示例。

参见Apple的使用Cocoa和Objective-C的Swift指南。本指南涵盖了如何使用Swift中的Objective-C和C代码,反之亦然,并对如何转换项目或在现有项目中混合和匹配Objective-C/C和Swift部分提出了建议。

编译器自动生成调用C函数和Objective-C方法的Swift语法。如文档所示,这个Objective-C:

UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

变成了这样的Swift代码:

let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped)

Xcode也可以在运行中进行这种转换——你可以在编辑Swift文件时使用Open quick,并输入Objective-C类名,它会带你到Swift化的类头。(你也可以通过cmd点击Swift文件中的API符号来获得。)iOS 8和OS X v10.10 (Yosemite)开发者库中的所有API参考文档在Objective-C和Swift表单(例如UIView)中都是可见的。

苹果在这个文档中提供了官方指南: how-to-call-objective-c-code-from-swift

以下是相关部分:

要将一组Objective-C文件导入到同一个应用程序目标中的Swift代码中,您需要依赖Objective-C桥接头文件向Swift公开这些文件。当你将一个Swift文件添加到一个现有的Objective-C应用程序中,或者将一个Objective-C文件添加到一个现有的Swift应用程序中时,Xcode提供了创建这个头文件的功能。

如果你接受,Xcode会创建桥接头文件和你创建的文件一起,并使用你的产品模块名后跟"-Bridging-Header.h"来命名它。或者,你也可以自己创建一个桥接头,方法是选择文件>新建>文件>[操作系统]>源>头文件

编辑桥接头,将Objective-C代码暴露给Swift代码:

在你的Objective-C桥接头中,导入每个你想要向Swift公开的Objective-C头。 在构建设置中,在Swift Compiler - Code Generation中,确保Objective-C桥接头构建设置具有桥接头文件的路径。路径应该是相对于你的项目,类似于你的信息的方式。plist路径在Build Settings中指定。在大多数情况下,您不需要修改此设置。

在桥接头中列出的任何公共Objective-C头对Swift都是可见的。

给那些试图将Objective-C库添加到Swift的人一个提示:你应该在构建设置中添加- objc ->链接->其他链接器标志。