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

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


当前回答

使任何Swift类的NSObject子类也有意义,我更喜欢使用任何Swift类在Objective-C类中看到,如:

@objc(MySwiftClass)
@objcMembers class MySwiftClass {...}

其他回答

使用objective-c的双向方法

1

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

2

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

现在可以开始了 谢谢

创建桥接头后,进入构建设置=>搜索“Objective-C桥接头”。

就在下面你会发现“Objective-C Generated Interface Header Name”文件。

在视图控制器中导入那个文件。

例子:在我的例子中:“Dauble-Swift.h”

我还想补充一点:

我非常感谢@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。

参见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)中都是可见的。

使任何Swift类的NSObject子类也有意义,我更喜欢使用任何Swift类在Objective-C类中看到,如:

@objc(MySwiftClass)
@objcMembers class MySwiftClass {...}