IOS培训
美国上市IOS培训机构

400-111-8989

热门课程

达内ios老师揭秘Swift 3新特性

  • 时间:2016-07-14
  • 发布:iOS培训
  • 来源:cocoachina

Swift 3将于今年下半年推出,为Swift开发者们带来了很多核心代码的改变。如果你没有关注过 Swift Evolution 项目,你可能会好奇Swift 3中有什么改变,它会对你的代码带来什么影响,以及何时可以将代码移植到Swift 3。达内ios培训(ios.tedu.cn)老师将为你答疑解惑!

开始

目前,Swift 3 预览版仅在 Xcode 8 beta版中可用。在未来几个月中,Swift 3 仍然在不断改变中,它还会发生一些变化。在 2016 年末,Xcode GM 发布时,Swift 3 的新特性才会稳定。所以各位开发者要沉住气,直到那个时候才可以向 App Store 提交用 Swift 3 编写的 App。

为了便于开发者们将代码迁移到 Swift 3,苹果在 Xcode 8 中增加了一个 Swift 版本,即 Swift 2.3,对 Swift 作了一个小小的升级。如果你是一个开发者,Swift 2.3 和 2.2 实际并无不同,但 Swift 2.3版本能够支持本次WWDC中提到的各种新的SDK 和 Xcode 特性。在 Xcode 8 推出 beta 版时,你可以用 Swift 2.3 来提交你的 app,而不用将代码迁移到 Swift 3。

我建议你在 Playground 中测试本文讨论的新特性,还可以用你的某个项目来测试 Migration Assistant,以便你对这些改变有所了解。由于在 Xcode 8 beta 下一个版本及 Siwft 3 正式发布之前,你无法向 App Store 提交 App,那么我建议暂时先不要讲代码迁移到Swift 3。

升级到 Swift 3

升级到Swift 3时,你会发现基本上每个文件都需要改动!之所以这样,是因为所有的 Cocoa API 名称都改变了。简而言之,API还是原来的 API,但这个 API 在 Objective-C 中是一种叫法,而在 Swift 中是另一种叫法。Swift 3的语法书写起来要更贴近于自然语言。

在Xcode 8中,苹果提供了Migration Assistant,它可以完成大部分的迁移工作。当然,仍然有一部分工作是需要你手动完成的。

你可以立即将代码升级到 2.3 或者 3.0。如果你需要将代码又转回来,你可以用 Xcode 的 Edit > Convert > To Current Swift Syntax… 菜单。编译器会和 Migrateion Assistant 一样智能。如果你在调用方法时,偶然使用了老的 API,编译器会显示一个 Fixt-It 选项,让你使用正确的新 API。幸好 Swift 3 在最终发布时,才会停止改变源代码。因此,你可以将你的 Swift 代码保存为不同的版本。但是 Swift 核心团队不能保证这一点以后不会改变,如果在某个时候不在保证源码上的兼容,他们会提供一个较长的过渡期。这意味着源码是稳定的,这样能鼓励更多的保守的公司去使用它。

这也说明,二进制稳定的目标还没有达到。本文最后将讨论这将导致的影响。

已实现的 Swift Evolution 提议

自从 Swift 开源以来,社区成员已经提交了超过 100 个改进建议。其中大部分(70多个)提议经过讨论修改之后已经被接受。还有一些仍然在激烈的争论之后被拒绝了。但最终,所有提议都要经过核心团队的最终拍板。

核心团队和广大社区之间的合作是卓有成效的。事实上,Swift 在 Github 上获得了 30,000 多颗星。每周都会有新的提议提交,周周如此。甚至苹果的工程师也会在 Github 上提交他们的提议。

在下一节中,你会看到一些类似 [SE-0001] 这样的标注。这是已经接受的提议编号,并且将在最终版的 Swift 3.0 中进行实现。每项提议都会标出,以便你查看每项改变的具体细节。

工具的改善

Swift 只是一门语言,大部分时候你都无法离开书写它的开发环境--对于苹果开发者来说,也就是 Xcode!工具上的改变影响着每天编写代码的方式。

Swift 3 修正了编译器和 IDE 中的 Bug,还改善了报告错误和信息的精确性。就像你所期望的,每个版本的发布都会让 Swift 和编译器的运行变得更快:

改善了字符串的 Hash 算法,导致在将字符串存入字典后,性能有 3 倍的提升

将对象从堆移到栈中存放,导致性能有 24 倍的提升(某些情况下)

编译器可以一次缓存多个文件(在整个模块被优化过的情况下)

优化了代码的大小,导致 Swift 代码的编译尺寸更小。以苹果的 Demobots 为例,编译尺寸缩减了原大小的 77%。

Xcode 也会更加智能地理解 Swift 代码:

过去,当你在一个 API 方法比如 sort() 上右击并跳转到定义时,你会看到一个不太容易理解的头文件。现在,在 Xcode 8 中,你会看到 sort() 方法实际上是 Array 类的扩展。

Swift Snapshots就如今晚发布的 Swift Evolution 所说。在完全合并到 Xcode 之前,Snapshots 提供了一个使用新语法的机会。Xcode 8 能够在 playgournd 中加载和运行 Swift Snapshots。

Swift 包管理器

开源后的 Swift 实际上包含了 Swift 语言本身、核心库和包管理器。这三者一起构成了我们所见到的 Swift。Swift 包管理器定义了一个简单的目录结构,其中包括了你所共享和导入到项目中的 Swift 代码。

类似于你所用过 Cocoapods 或 Carthage 这些包管理器,Swift 包管理器会下载依赖项并编译它们,把它们 link 成库或可执行文件。已经有 1000 个库支持 Swift 包管理器,并且在未来几个月中,还会有更多的库支持它。

计划中的特性

前面说过,Swift 3 尽量避免不兼容的改变,从而使你的代码能够从一个版本与下一个版本兼容。如果这是真的,那么在这次发布中应该还有一些更远大的目标未能达到,即泛型增强(generic additions)和 ABI(程序二进制接口)稳定。

泛型增强包括递归协议约束和能够将一个受约束的扩展符合新协议(例如,一个用于存放 Equatable 对象的数组也应当遵守 Equatable 协议)。在这些特性尚未实现之前,Swift 不能被视作 ABI 稳定的。

ABI 稳定要求应用程序和库无论使用哪个版本的编译器编译,都能被 link 和能够彼此进行交互。这对于第三方库来说是个重要的进步,因为这样就可以不需要提供源码就可以封装出框架了,而现在新版本的 Swift 不但要这些第三方库修改代码,还要重新进行编译。

此外,如果 ABI 稳定就可以移除包含在二进制文件中的 Swift 标准库,因为就目前来说 iOS 和 macOS APP都是用 Xcode 创建的。目前的二进制文件中包含有 2 MB 左右的文件大小是为了确保能够兼容未来的操作系统。

总之,你现在只能保持源代码的版本兼容,而二进制版本的兼容当前仍然是不可能的。

结尾

Swift 仍然在不断演进,因为社区的目标是最佳实践。虽然它还很年轻,但它同时也面临着无比巨大的机遇和美好未来。Swift 现在已经能够在 Linux 上运行了,在未来几年,你还会看见它在更多的服务器和设备上运行。从头设计一门语言必然会破坏 ABI 稳定性,一旦等它稳定后这种破坏就变得小多了。这(开源)是唯一能够让这门语言变得更好的机会,否则我们必将后悔莫及。

Swift 正在扩大它的影响力。苹果正在身体力行。苹果的团队们正在 Music app、Console、Sierra画中画、Xcode 文档查看器、新的 iPad 版的Swift Playground app 中使用 Swift。

上一篇:Bug 调试经验总结
下一篇:iOS培训与Android培训的收入差距

腾讯登顶全球iOS收入榜首能否继续保持优势?

苹果今年发布会拟3月21日举行

人工智能时代的到来

达内揭秘-iOS 8 vs iOS 9差异在哪里?

选择城市和中心
贵州省

广西省

海南省