在一个项目中同时使用Swift和Objective-C代码混合编程的方法

2020-01-08 22:29:49王旭

你应该编辑这个头文件来对 Swift 暴露出 Objective-C 代码。

在同一 target 中将 Objective-C 代码导入到 Swift 中

1) 在 Objective-C 桥接头文件中,import 任何你想暴露给 Swift 的头文件,例如:

复制代码
// OBJECTIVE-C

 

#import "XYZCustomCell.h"
#import "XYZCustomView.h"
#import "XYZCustomViewController.h"

 

2) 确保在 Build Settings 中 Objective-C 桥接头文件的 build setting 是基于 Swfit 编译器,即 Code Generation 含有头文件的路径。这个路径必须是头文件自身的路径,而不是它所在的目录。

这个路径应该是你工程的相对路径,类似 Info.plist 在 Build Settings 中指定的路径。在大多数情况下,你不需要修改这个设置。

在这个桥接头文件中列出的所有 public 的 Objective-C 头文件都会对 Swift 可见。之后当前 target 的所有 Swift 文件都可以使用这些头文件中的方法,不需要任何 import 语句。用 Swift 语法使用这些 Objective-C 代码,就像使用系统自带的 Swift 类一样。 

复制代码
// SWIFT

 

let myCell = XYZCustomCell()
myCell.subtitle = "A custom cell"

 

将 Swift 导入 Objective-C

向 Objective-C 中导入Swift 代码时,你依赖 Xcode 生成的头文件来向 Objective-C 暴露 Swift 代码。这是自动生成 Objective-C 头文件,它包含了你的 target 中所有 Swift 代码中定义的接口。可以把这个 Objective-C 头文件看作 Swift 代码的 umbrella header。它以 product 模块名加 -Swift.h 来命名。关于 product 的模块名,详见Naming Your Product Module。

你不需要做任何事情来生成这个头文件,只需要将它导入到你的 Objective-C 代码来使用它。注意这个头文件中的 Swift 接口包含了它所使用到的所有 Objective-C 类型。如果你在 Swift 代码中使用你自己的 Objective-C 类型,确保先将对应的 Objective-C 头文件导入到你的 Swift 代码中,然后才将 Swift 自动生成的头文件导入到 Objective-C .m 源文件中来访问 Swift 代码。

在同一 target 中将 Swift 代码导入到 Objective-C 中