首页 » 漏洞 » Swift 3.1改进了语言、包管理器和Linux实现

Swift 3.1改进了语言、包管理器和Linux实现

 

按照计划,近日 发布 的Swift 3.1在源代码方面可兼容Swift 3.0,但同时在语言和标准库方面包含大量改进,并增强了Linux的实现。

在语言方面, Sequence 协议 新增了两个成员drop(while:)prefix(while:) 。在特定谓词为True时,可通过丢弃或包含序列初始元素的方式返回所获得的子序列。因此如果有一个序列 s ,可通过执行下列命令获取其n-th到m-th子序列:

let subseq = s.prefix(while: {$0 < m}).drop(while: {$0 < n})

Swift 3.1还为所有数值类型增加了多个 转换构造器(Conversion initializer) ,包括 IntFloat ,以及 Double 类型,借此可产生正确的结果,或返回 nil 。所谓的可失败构造器(Failable initializer)是为了更好地解决松散类型化数据的转换问题,例如JSON格式所包含的数据。借此所有数值类型获得了一个可以使用 exactly 关键字的全新构造器,例如:

init?(exactly value: Int64)

根据 社区反馈 ,可失败的构造器是可抛出异常的构造器的首选做法。

虽然官方新闻稿中并未提及,但更新后的 Apple Swift 3.1指南 文档中 提到 ,类型扩展现已可包含泛型 where 子句:

extension Container where Item == Double {     func average() -> Double {         var sum = 0.0         for index in 0.. 

以前, where 子句只能用作将泛型约束给特定协议,这可能导致仅仅为了指定所需约束而引入ad-hoc协议:

extension Container where Item: MyConstrainProtocol { ...

在语言方面还有一个改动需要注意,Swift 3.1对 @available 特性进行了扩展,可用于表达 按照Swift不同版本指定的可用性 ,而以前只能按照语言和平台来指定可用性:

@available(swift, introduced: 3.0, obsoleted: 3.1) class Foo {   //... }

借此开发者无须使用条件式编译即可判断函数、声明等的候补版本。

Swift的Linux实现对现有的各种类进行了改进,包括 NSDecimalURLSessionNSArrayNSData ,同时改进了JSON序列化的性能,并在其他方面有诸多改进。

最后,Swift Package Manager也提供了用户期待已久的很多功能,例如:

  • 可编辑软件包 ,可通过 swift package edit 命令让软件包变得可编辑。这意味着包将下移至用户的 Package 目录,可从依赖项更新过程中排除,因此用户可以更自由地提交并推送变更。
  • 版本锁定(Version pinning) ,可使用 swift package pinswift package unpin 命令,或编辑 Package.pins 文件实现。
  • 版本前提需求 ,可以让软件包在不破坏使用老版本工具链客户端的情况下采用Swift的新功能。在更新老版本工具链的软件包时,需要较新功能的软件包版本可被自动忽略。
  • Swift兼容性版本 ,与上一个功能的意义类似,但主要针对语言的版本,可决定软件包要使用第3或第4版语言。

Swift 3.1可在macOS上通过 Xcode 8.3 使用,此外还提供了[适用于Ubuntu的二进制发行版 13 ,同时针对其他平台的源代码已发布至 GitHub

阅读英文原文: Swift 3.1 Improves Language, Package Manager, and Linux Implementation

原文链接:Swift 3.1改进了语言、包管理器和Linux实现,转载请注明来源!

0