介绍 Standard Library Preview Package

Apple 最近新开源了一个项目,命名为 Standard Library Preview Package,主要是用来加强 Swift Evolution 进程的。该 Preview Package 将包含已被纳入 Swift Standard Library 计划但还没被集成到 Swift 正式版中的功能。这可以使得我们在真实环境中使用这些新特性,并给予及时的反馈,同时也降低了给 Standard Library 贡献代码的技术门槛。

Preview Package 最近接收了 SE-0270 提议,该提议实现了获取一个集合的子集,比如 subranges(where:)moveSubranges(_:to:)

使用 Preview Package

想在 Swift Package Manager 项目中使用 Standard Library Preview Package,只需要编辑 Package.swift 文件即可。

let package = Package(
    name: "MyPackage",
    dependencies: [
       .package(url: "https://github.com/apple/swift-standard-library-preview.git", from: "0.0.1"),
    ],
    targets: [
        .target(
            name: "MyTarget",
            dependencies: [.product(name: "StandardLibraryPreview", package: "swift-standard-library-preview")]),
    ]
)

使用 SE-0270 提议的新特性:

import StandardLibraryPreview

var numbers = [10, 12, -5, 14, -3, -9, 15]
let negatives = numbers.subranges(where: { $0 < 0 })
// numbers[negatives].count == 3

numbers.moveSubranges(negatives, to: 0)
// numbers == [-5, -3, -9, 10, 12, 14, 15]

所有纳入 Standard Library 中的提议,都将会在 Preview Package 中先实现,然后获得真实环境中的使用反馈,这样可以及时发现问题。

使用独立的 Package

Standard Library Preview package 正在持续进行开发中,主版本为 0 意味着源码还不是稳定的。如果你想求稳,可以使用独立的 package。

比如拿 SE-0270 来说,它有一个独立的 package SE0270_RangeSet。如果只想要 SE-0270 提议中的特性的话,只需要如下编辑 Package.swift 即可。

let package = Package(
    name: "MyPackage",
    dependencies: [
       .package(url: "https://github.com/apple/swift-se0270-range-set.git", from: "1.0.0"),
    ],
    targets: [
        .target(
            name: "MyTarget",
            dependencies: [.product(name: "SE0270_RangeSet", package: "swift-se0270-range-set")]),
    ]
)

导入对应的 package

import SE0270_RangeSet

var numbers = [10, 12, -5, 14, -3, -9, 15]
let negatives = numbers.subranges(where: { $0 < 0 })
// numbers[negatives].count == 3

numbers.moveSubranges(negatives, to: 0)
// numbers == [-5, -3, -9, 10, 12, 14, 15]

总结

以前一个提议被 review 之前,需要先提供完整的代码实现。但这提高了大家贡献代码的技术门槛,因为可能还会涉及到 LLVMCLangSwift 编译器 等相关的项目。

有了 Preview Package 后,一方面可以降低大家贡献代码的门槛,另一方面也能及时获取到在真实环境中的使用反馈。

发表评论

电子邮件地址不会被公开。 必填项已用*标注