学习迁移代码的推荐步骤。
概览
你可以在 Swift 中替换 Objective-C App 的部分代码,从而改进 App 的架构、逻辑和性能。互操作性助你有条不紊地将迁移到 Swift 的特性整合到 Objective-C 代码中。你无需立刻在 Swift 中重新编写整个 App。
清理你的代码
对现有的 Objective-C 代码库进行清理和现代化改造,确保你的 Objective-C 代码和 Swift 代码具有最佳的兼容性。例如,如果你的代码库中有些部分尚未添加为空性注释,现在是时候添加这些注释了。确保你的代码遵循现代编程做法,以便能够更加高效地与 Swift 交互。
迁移你的代码
要将代码迁移到 Swift,最有效的方法是逐个文件迁移,即每次迁移一个类。由于你无法在 Objective-C 中将 Swift 类归为子类,因此最好在 App 中选用没有任何子类的类。你可以将这个类的 .m
和 .h
文件替换为单个 .swift
文件。你的实现和接口全部都直接并入这一个 Swift 文件中。你不用创建标头文件;Xcode 会在你需要引用时自动创建标头。
-
通过选取“File”(文件) >“New”(新建) >“File”(文件) >“(iOS, watchOS, tvOS, or macOS)”(iOS、watchOS、Apple TVOS 或 macOS) >“Source”(来源) >“Swift File”(Swift 文件),为对应的 Objective-C .m 和 .h 文件创建 Swift 类。你可以使用与 Objective-C 类相同的名称,也可以使用不同的名称。类前缀在 Swift 中是可选的。
-
导入相关的系统框架。
-
如果你需要从 Swift 文件中相同的 App 目标访问 Objective-C 代码,应填充 Objective-C 桥接标头。
-
要让你的 Swift 类可以在 Objective-C 中访问和使用,应使它成为某个 Objective-C 类的子代。要为在 Objective-C 中使用的类指定一个特定名称,应给它标上
@objc(
name)
,其中 name 是你的 Objective-C 代码用于引用 Swift 类的名称。
迁移期间
-
你可以通过将 Objective-C 类归入子类、采用 Objective-C 协议等方法,设置你的 Swift 类来整合 Objective-C 行为。
-
在处理 Objective-C API 时,你需要知道 Swift 是如何转换某些 Objective-C 语言特性的。有关更多信息,请参阅“Objective-C 和 C 代码自定 (英文)”。
-
必要时使用
@objc(
name)
属性为各种属性和方法提供 Objective-C 名称。 -
分别使用
func
和class func
来表示实例 (-
) 和类 (+
) 方法。 -
将简单的宏声明为全局常量,并将复杂的宏转换为函数。
完成之后
-
更新 Objective-C 代码中的 import 语句 (更新为
#import "Product
) 来引用你的新 Swift 代码。Module Name-Swift .h" -
通过取消选择目标成员资格复选框,从目标中移除原始的 Objective-C
.m
文件。不要立即删除.m
和.h
文件;它们可以在故障诊断时使用。 -
如果你为 Swift 类提供了不同的名称,应将你的代码更新为使用 Swift 类名称,而不是 Objective-C 名称。
故障诊断技巧和提醒
迁移体验会因你的现有代码库而有所不同,但这里的一些通用步骤和工具可以帮助你对具体过程进行故障诊断:
-
请记住,你无法在 Objective-C 中将 Swift 类归为子类。因此,你迁移的类不能有任何 Objective-C 子类。
-
在将类迁移到 Swift 后,你必须在构建之前从目标中移除对应的
.m
文件,以便避免重复符号错误。 -
要使 Swift 类能够在 Objective-C 中使用,应使它成为 Objective-C 类的子代。
-
按住 Command 键点按 Swift 类名称可以查看其生成的标头。
-
按住 Option 键点按符号可以查看相关的隐含信息,如类型、属性和文档注释。