WWDC 2016聚焦:Swift 3

Swift在2014年发布后很快就被我们的开发人员和许多其他开发人员所采用。但是,随着Swift在WWDC 2016上宣布的第一个重大更新,苹果可以期望其编程语言在社区中得到比以往任何时候都更多的使用和优化。

苹果去年12月发布了Swift作为开源项目。 从那时起,开发人员一直在努力使语言无缝化。 此外,Apple的内部团队已在更多自己的应用程序中使用Swift,包括新的Music应用程序,Console应用程序以及Agents和Daemon画中画功能。 Xcode 8中的新文档查看器以及iOS的新Swift Playgrounds完全用Swift编写。

Swift 3是Apple开发人员和应用程序创建者广泛社区中的开发人员辛勤工作的产物。 Black Pixel开发人员Kai Schaller和我想分享一些有关该语言最近的更改以及这些更新将如何影响开发人员的初步想法。

对图书馆发表意见

直到Swift 3为止,感觉Swift的主要关注点是发展观点并维护与旧式Objective-C代码库的互操作性。 Swift 3是说“我们认为我们找到了声音”的版本。Swift3是Swift开始将其意见强加到现有库上的时候,其中的表现就是对系统提供的类进行了重命名,并删除了NS前缀。我们已经知道了几十年了。 这种变化进一步扩大,因为数十年来我们一直使用的许多C API都将进行面向对象的改造,如“ Swift API设计指南” WWDC会话中所详述。

代码迁移中的障碍

由于Swift 3是非源兼容的更改,因此Apple在Xcode中提供了迁移助手。 在一些现有的Swift代码上运行此迁移工具表明,转换几乎是无痛苦的,但是如果不更改某些类引用并修复一些不再有效的方法调用就无法完成。 当然,必须要提到的是,这些问题与迁移器的第一个beta版本有关,并且随着该工具越来越接近发行版而可能会得到修复或更改。 无法自动翻译的一些不完整的代码示例包括:

  • Swift 3希望枚举值以小写字母开头,并且通常会自动对其进行修复。 但是,如果以完全指定的方式引用枚举值,例如“ DataError.Unknown ”,它将不会小写该值的第一个字母(在这种情况下为“ u ”)。
  • NSMutableURLRequest不再存在。 它已被替换为“ URLRequest ”,现在是一个结构而不是一个类。 存在的对NSMutableURLRequest的任何引用都需要手动更改。 另外,由于URLRequest是一个结构,因此如果调用任何修改请求的方法,则需要将其存储在变量( var )中而不是常量( let )中。
  • 现在,如果方法返回值并且没有分配任何值,即使忽略返回值不是错误,这也是警告。 要使警告静音,方法调用的结果需要手动分配给“ _ ”。

转换过程中的异常

尽管有新的约定默认情况下按名称引用所有参数(而不是自动省略第一个参数名称),但是Swift 3转换过程会将“ _ ”添加到函数的第一个参数,而不是在代码中添加参数名称调用该函数。

社区驱动的更新

总体而言,与Swift最初引入时带来的革命性变化相比,这是一个进化性的变化。 这并不意味着这是一个微不足道的版本。 Swift 3可以认为是第一个主要由社区驱动的发行版。 所有更改,无论它们来自Apple内部还是外部,都将经过相同的透明建议和审核过程,包括任何人都可以参与的深入讨论。

如果您准备研究Swift,请访问Swift.org,在那里您可以找到所需的所有工具和资源,并为项目贡献想法和专业知识。 让我们在Twitter上了解您对Swift 3可用的更新最兴奋的事情。请继续关注我们对Swift开发人员工具和调试的改进以及Swift Playgrounds的创意世界。

导致本文的会话的不全面列表:

  • Swift API设计指南:https://developer.apple.com/videos/play/wwdc2016/403/
  • Swift的新功能:https://developer.apple.com/videos/play/wwdc2016/402/
  • Swift基金会中的新增功能:https://developer.apple.com/videos/play/wwdc2016/207/
  • 可可的新功能:https://developer.apple.com/videos/play/wwdc2016/203/
  • 可可触控的新增功能:https://developer.apple.com/videos/play/wwdc2016/205/