使用Swift与Cocoa和Objective-C交互-(8)将你的 Objective-C 代码迁移到 Swift 中

swift 发布于 2017年09月23日
准备你的 Objective-C 代码用作迁移

在你准备迁移你的代码之前,确保你的 Objective-C 和 Swift 代码拥有最佳的兼容性。这意味着你需要整理并对你现存的 Objective-C 代码进行现代化修改。你现存的代码应该遵从更现代的编码实践,这样能让它更容易的和 Swift 进行无缝交互。 关于要采用的实践的简短列表,请查看 "采用现代化的 Objective-C" 一章。

迁移过程

将代码迁移到 Swift 中最有效的方法是以逐个文件的方式,就是,每个类使用一个文件。因为你可以将 Swift 的类在 Objective-C 中继承。你可以将这个类的 .m.h 文件通过一个 .swift 文件来替换。你的所有接口和实现都会直接进入这个 Swift 文件中。你不需要创建一个头文件; Xcode 会在你需要的时候自动生成头文件。

在你开始之前
  • 为你的 Objective-C 的 .m.h 文件创建 Swift 类,通过选择 File > New > File > (iOS or OS X) > Source > Swift File 来创建。你可以使用和你的 Objective-C 类相同或不同的名称。在 Swift 中,类前缀是可选的。
  • 导入相关的系统框架
  • 如果你需要在同一个 app target 中你的 Swift 文件中访问 Objective-C 代码的话,还需要填充 Objective-C bridging header 文件。关于如何填充,可以参看 "导入同一个 app target 的代码"。
  • 要让你的 Swift 类在 Objective-C 可访问并且可用,就要让他继承 Objective-C 类,或者使用 @objc 属性来标记它。如果要对在 Objective-C 使用的类的名称进行特殊指定,需要使用 @objc<#name#> 来标记它,<#name#> 代码你 Objective-C 代码中要引用的 Swift 类名。关于 @objc 的更多信息,可以查看"Swift 类型兼容性" 一章。
你的工作
  • 你可以通过继承 Objective-C 类,采用 Objective-C 协议,等等,来让你的 Swift 类集成 Objective-C 的行为。关于更多信息,请查看 "使用 Objective-C 行为来写 Swift 类"。
  • 在你操作 Objective-C API 的时候,你需要知道 Swift 如何转义一些 Objective-C 的语言特性。关于更多信息,请查看 "和 Objective-C API 交互这章"。
  • 当写与 Cocoa 框架交互的 Swift 代码的时候,记住一些类型是被桥接的,这意味着你可以在使用 Objective-C 类型 的地方,使用 Swift 类型。关于更多信息,请查看 "和 Cocoa 数据类型交互"。
  • 如果你要将 Cocoa 的设计模式应用于 Swift 类中,查看 "采用 Cocoa 设计模式" 这章中关于迁移公用设计模式的更多信息。
  • 关于将你的 Objective-C 类属性转移到 Swift 属性中的信息,请查看 "Swift 编程语言这章"。
  • 在需要的时候对 Objective-C 属性和方法名称使用 @objc(<#name#>) 属性。例如, 你可以在 Objective-C 中对一个叫做 enabeld 的属性进行标记,来得到叫做 isEnabled 的 getter 方法。
var enabled: Bool {
@objc(isEnabled) get{
    /* ... */
}
}
  • 将实例方法(-)和类方法(+)分别用 funcclass func 进行标记。
  • 将简单宏定义为全局常量,并将复杂的宏定义成函数。
在你完成后
  • 更新你的 Objective-C 代码的 import 语句(更新为 #import "ProductModuleName-Swift.h"),就像 "从同一个 App Target 导入代码" 中描述的。
  • 通过反选 target 中的成员复选框,将最初的 Objective-C .m 文件从 target 中删除。 不要直接将 .m.h 文件直接删除;可以用他们来调试问题。
  • 如果你对 Swift 类提供了新名字,更新你的代码使用 Swift 类名来代替 Objective-C 类名。
调试问题技巧和提示

每个迁移过程体验,根据你的现存代码而不同。然而,还有好多通用的步骤和工具来帮助你来调试你代码迁移中的问题。

  • 记住你不能够在 Objective-C 中继承 Swift 中的类。这样,你迁移过来的类不能拥有任何的 Objective-C 子类。
  • 当你将类迁移到 Swift 中时,在构建之前你必须将相应的 .m 文件删除掉,这样才能 避免重复符号的错误。
  • 如果要在 Objective-C 中可访问并可用,Swift 类必须继承自 Objective-C 类,或者用 @objc 来标记。
  • 当你将 Swift 代码迁移到 Objective-C 中时,记住 Objective-C 不能将 Swift 中一些专有的功能迁移过来。关于 详细信息,可以查看 "在 Objective-C 中使用 Swift" 一章。
  • 按住 Command 按键然后点击 Swift 类的类名来查看生成的头文件。
  • 按住 Option 键然后点击一个符号可以查看关于它的更多信息,比如它的类型,属性,和文档注释。

如果你觉得这篇文章有帮助,还可以关注微信公众号 swift-cafe,会有更多我的原创内容分享给你~

本站文章均为原创内容,如需转载请注明出处,谢谢。
关注微信公众号
发现更多精彩
swift-cafe