Swift 4.2 正式发布

  • 2018-09-27
  • 本文字数:943 字

    阅读完需:约 3 分钟

在 Swift 4 发布了一年之后,Swift 4.2 版本也正式推出。这一版本带来了语言和标准库方面的改进,包括更好的泛型、Hashable 协议以及随机数生成。另外,Swift 语言维护者Ted Kremenek 写道,Swift 4 能提供更快的编译速度,并提升了调试体验。

在语言层面,Swift 4.2 完成了从 Swift 4.1 开始的泛型条件一致性开发工作,它实现了一个规范,即某种类型必须满足某些条件才符合某种协议。例如:

 extension Array: Equatable where Element: Equatable {
  static func ==(lhs: Array<Element>, rhs: Array<Element>) -> Bool { ... }
}

Swift 4.2 添加了在运行时查询类型来获得条件一致性的可能性,而这在 Swift 4.1 中会发生崩溃,例如:


if let array = items as? Equatable { //– safely use == here }

Swift 4.2 另外一个有用的功能是 Enum case 的衍生集合,可以通过.allCases 属性迭代所有符合 CaseIterable 协议的 case。

其他的改进包括提供一组新的 API 用于随机数生成和重排更好的散列,以及类型安全的动态成员查

从调试前端来看,Swift 编译器现在支持使用#warning 和#error 指令在代码中标记问题。例如:

#warning("Unsafe operation")
#error("Prodive your credentials here")

Kremenek 还特别指出编译器性能获得了提升,这要归功于批处理模式编译和改进的运行时性能(因为对 retain/release 周期的调用发生了变化)。

另外,iOS 开发人员 Javier Soto 在推文中写道:

一年之后,Swift 4.2 版本的 KVO 错误还是没有解决。除非你想体验随机崩溃的感觉,否则不要在 iOS 程序中使用 Swift KVO 语法。

具体来说,当主线程尝试注册观察者(例如更新 UI 元素)的同时,在后台线程运行 KVO keyPathsForValuesAffectingValue 方法可能就会触发这个 bug。

对于所有受到影响的开发人员,可以使用 PMKVObserver ,它是安全强类型的 Swift 4 KVO 语法替代品。

Swift 4.2 与 Swift 4 和 3 代码兼容,并被包括在 Xcode 10 中。通过 Swift Migrator 工具可以轻松实现从早先版本的迁移。

苹果公司在 WWDC 2018 发表一个 40 分钟的演讲中,介绍了Swift 4 的新特性概览,要了解更多详情,请参考官方公告。 Ole Begemann’s Swift 4.2 playground 是学习 Swift 4.2 新功能的一个很好的资源。

查看英文原文 Swift 4.2 Hits the Road

感谢无明对本文的审校。