将 Objective-C 代码迁移到 Swift(Swift 2.0更新)-b

本节内容包括:

  • 为你的Objective-c代码做好迁移准备 (Preparing Your Objective-C Code for Migration)
  • 迁移过程(The Migration Process)
  • 问题解决提示(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 重写整个项目。

为你的Objective-C代码做好迁移准备

在开始迁移你的代码之前,请确保你的 Objective-C 和 Swift 代码间有着最佳兼容性。这意味着整理并使用 Objective-C 的现代化特性来优化你的现有项目。为了和 Swift 进行更容易的无缝交互,你的现有代码需要遵循现代编码实践。在开始前,有个简短的适配练习列表,参看Adopting Mordern Objective-C

迁移过程

最有效迁移代码的方式是基于逐个文件,即一次完成一个类。由于你不能在 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 + 单击一个符号来查看更详细的信息,比如它的类型,属性以及文档注释等。
时间: 2024-10-14 10:00:50

将 Objective-C 代码迁移到 Swift(Swift 2.0更新)-b的相关文章

iOS: 学习笔记, 用代码驱动自动布局实例(swift)

iOS自动布局是设置iOS界面的利器.本实例展示了如何使用自动布局语言设置水平布局, 垂直布局1. 创建空白iOS项目(swift)2. 添加一个控制器类, 修改YYAppDelegate.swift文件 @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFi

快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览

快看Sample代码,速学Swift语言(2)-基础介绍 Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或者Objective-C的开发经验获得一种熟悉感.Swift提供很多基础类型,如Int,String,Double,Bool等类型,它和Objective-C的相关类型对应,不过他是值类型,而Objective-C的基础类型是引用类型,另外Swift还提供了几个集合类型,如Array, Set, 和

如何配置Swift语言环境 0.94稳定版本

下载语言包,直接把bin路径添加进PATH: Download the file from http://swiftlang.org/packages/swift-0.94.1.tar.gz. Extract by running "tar xfz swift-0.94.1.tar.gz" Add to PATH by running "export PATH=$PATH:/path/to/swift-0.94.1/bin" 执行示例代码:cd swift-0.94

编程词典 - Swift version V1.0

App Store: 编程词典 - Swift version V1.0 这是一本覆盖Swift基础词汇的词典,也是你可以自定义的单词本. 学编程的前提是学好英语,传统词典编写速度已赶不上计算机行业发明新词的速度.本应用专注于Swift语言和iOS开发中有特定含义的英文单词,对这些单词进行详细的中文讲解,最重要的是有丰富实用的代码示例. 在你学习Swift的过程中,会遇到很多新词,也会对已知的词有新的理解.这个应用是你的单词本,你可以创建新词,也可以编辑任何已存在的单词.它将成为最适合你学习进度

在同个工程中使用 Swift 和 Objective-C(Swift 2.0更新)-b

本节包含内容: Mix and Match 概述(Mix and Match Overview) 在同个应用的 target 中导入(Importing Code from Within the Same App Target) 在同个 Framework 的 target 中导入(Importing Code from Within the Same Framework Target) 导入外部 framework(Importing External Frameworks) 在 Object

Swift— Swift编码规范之命名规范-备

程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要. 命名方法很多,但是比较有名的,广泛接受命名法有: 匈牙利命名,一般只是命名变量,原则是:变量名=类型前缀+描述,如bFoo表示布尔类型变量,pFoo表示指针类型变量.匈牙利命名还是有一定争议的,在Swift编码规范中几本不采用匈牙利命名. 驼峰命名(Camel-Case),又称骆驼命名法,是指混合使用大小写字母来名字.驼峰命名又分为:小驼峰法和大驼峰法. 小驼峰法是第一个单词是全部小写,后面的单词首字母大写,如:myRoo

Objective C 代码片段(类别)

1 @interface NSString (reverse) 2 3 -(NSString *) reverseString; 4 5 @end 1 @implementation NSString (reverse) 2 3 -(NSString *) reverseString { 4 int length = [self length]; 5 NSMutableString *reversedString; 6 7 reversedString = [[NSMutableString a

EF CodeFirs 代码迁移、数据迁移

最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    标题叫EF CodeFirs 代码迁移.数据迁移. 那么:到底叫代码迁移还是数据迁移?我在网上看了大半天,怎么叫的都有,后来查了MSDN,MSDN上叫代码迁移.在此,我们也称之为代码迁移. 为什么有人将其称为数据迁移呢?可能是因为本节内容和操作数据库有关<增加一张表,删除一张表,增加一个表字段,删除一个表字段,修改一个表字段等>,所以网友称之为数

为什么你需要将代码迁移到ASP.NET Core 2.0?

随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Studio Code 来开发自己的 .NET Core 2.0 项目.同时,微软 .NET 开发工具组也宣布了 ASP.NET Core 2.0 的发布,并且此版本与 .NET Core 2.0.Visual Studio 2017 15.3 和新的 Razor Pages 页面优化范例兼容.相信目前技