在 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
感谢无明对本文的审校。
评论 1 条评论