本节内容包括:html
为你的Objective-c代码作好迁移准备 (Preparing Your Objective-C Code for Migration)ios
迁移过程(The Migration Process)swift
问题解决提示(Troubleshooting Tips and Reminders)设计模式
迁移工做提供了一个从新审视现有 Objective-C 应用程序的机会,并经过 替换部分Swift 代码来更好的优化应用程序的架构,逻辑以及性能。换句话说,所谓增量app迁移,就是让你使用以前的工具-mix and match 来提高相互之间的可操做性。当要选择哪些特性和功能来用 Swift,哪些依然用 Objective-C 实现时,Mix-and-match让这一切变得简单。Swift 和 Objective-C 的互用性又使得将这些功能集成到 Objective-C 变得并不困难。经过这些工具能够开放 Swift 的扩展功能并集成到现有的 Objective-C 项目中而彻底没必要马上使用 Swift 重写整个项目。xcode
为你的Objective-C代码作好迁移准备架构
在开始迁移你的代码以前,请确保你的 Objective-C 和 Swift 代码间有着最佳兼容性。这意味着整理并使用 Objective-C 的现代化特性来优化你的现有项目。为了和 Swift 进行更容易的无缝交互,你的现有代码须要遵循现代编码实践。在开始前,有个简短的适配练习列表,参看Adopting Mordern Objective-C。app
迁移过程框架
最有效迁移代码的方式是基于逐个文件,即一次完成一个类。因为你不能在 Objective-C 中继承 Swift类, 最好选择一个没有子类的(译者:从类的继承角度来看,应该先从类族树的叶子节点开始,自底向上的进行迁移操做)。你就能够用单个.swift文件来代替对应的.m和.h文件了。你全部的实现代码和接口将直接放进单个 Swift 文件。你不用再建立头文件了;Xcode 会在你须要引用的时候自动生成头文件。(译者:固然这是在xcode内部机制完成的了,对开发者是透明的)函数
准备工做工具
在 Xcode 中:File>New>File>(iOS 或者 OS X) > Other > Swift 为对应的 Objective-C.m 和.h文件建立一个 Swift 类。
导入相关系统框架。
若是你但愿在 Swift 文件中访问 Objective-C 代码的话,能够填入一个 Objective-C 桥接头。具体的操做步骤,请看 Importing Code from Within the Same App Target。
为使你的 Swift 类能在 Objective-C 中访问使用,能够继承 Objective-C 类,或者标记上@objc属性。为类指定特殊的名称,以在 Objective-C 中使用,标记上@objc(#name#), <#name#>就是在 Objective-C 中引用的 Swift 类名。 更多信息,请看Swift Type Compatibility。
开始工做
你能够经过继承 Objective-C 类,适配 Objective-C 协议,或者更多的方式,来让 Swift 类集成 Objective-C 行为。更多信息,请看Writing Swift Classes with Objective-C Behavior
当你使用 Objective-C APIs 的时候,你须要知道 Swift 是怎样来翻译某些 Objective-C 特性的。更多信息,请看Interacting with Objective-C APIs
当用 Swift 编写用到 Cocoa 框架的代码时,记住某些类型是被桥接的,意味着你可使用某些 Swift 类型来替代 Objective-C 类型。更多信息,请看Working with Cocoa Data Types
当你在 Swift 中运用 Cocoa设计模式得时候,请看 Adopting Cocoa Design Patterns获取更多的通用设计模式的转换信息。
对于打算将项目从 Objective-C 转换到 Swfit 的人,请看 Properties。
在必要的时候,请为 Swift 的属性或方法,经过@objc(<#name#>)属性来提供 Objective-C 名称,就像这样:
1
2
3
4
5
|
var
enabled: Bool {
@objc(isEnabled) get {
/* ... */
}
}
|
分别用func和class func来表示 instance(-) 和 class(+) 方法。
声明简单的宏来做为常量,将复杂的宏转换为函数。
大功告成
在你的 Objective-C 代码中更新 import 语句为 #import "模块名-Swift.h",可参阅Importing Code from Within the Same App Target中曾有提到。
在Target 的成员选择框中去掉勾选框来移除原始的 Objective-C.m文件.不要马上删除.m和.h文件,以备解决问题用。
若是你给 Swift 类起了一个不一样的名字,请使用 Swift 类名代替 Objective-C 名。
问题解决提示
尽管对于不一样的项目,迁移的经历是不尽相同的,不管怎样,都有一些通用的步骤和工具能帮你解决代码迁移时碰到的问题:
记住:你不能在 Objective-C 中继承 Swift 类。所以,被你迁移的类不能有任何的 Objective-C 子类存在于你的应用中。
当你迁移一个类到 Swift 的时候,你必须从 target 中移除相关的.m文件,以免编译时提示出现重复的符号等编译错误。
为了在 Objective-C 中能够访问并使用,Swift 类必须是一个 Objective-C 类的子类,或者被标记为@objc。
当你在 Objective-C 中使用 Swift 代码的时候,记住 Objective-C 不能理解那些 Swift 的某些特性,请看Using Swift from Objective-C
能够经过Commond + 单击一个 Swift 类名来查看它生成的头文件。
能够经过Option + 单击一个符号来查看更详细的信息,好比它的类型,属性以及文档注释等。