心智花园 Picos 是我从一个项目带到另一个项目的小型、常用功能的微小包。 欢迎在你的项目中使用它们。 Picos 在 Apple OS、Linux 和 Windows 上经过测试。
Nonempty 包包含了 Nonempty
,一个包装器类型,你可以用它来断言一个集合是非空的。
你可以使用此类型来
向编译器表明,当使用特定集合时,它不会为空。 使用内置的 nonempty
投影来访问常规集合 API 的有用变体,而无需处理 optionals,并返回 Nonempty
包装器来证明你的编辑没有导致集合缩小。
在你的接口中表明需要非空集合,而无需在接受空集合时导致前提条件失败。
你可以将其用作其自身的类型,或用作属性包装器,以继续访问底层集合类型的完整 API。
例如
var numbers = Nonempty(assert: [1, 2, 3, 4])
// Only perform operations that maintain the nonempty property:
numbers.remove(at: 0) // compiler error!
numbers.nonempty.append(5) // works!
let double = numbers.nonempty.map {
$0 * 2
} // double is a Nonempty<[Int]>!
// Use the nonempty type as a collection itself:
for number in numbers {
print(number)
}
// … and avoid optionals where possible:
let maybeFirst = numbers.first // Optional<Int>: 1
let first = numbers.nonempty.first // Int: 1
// Use this as a property wrapper:
@Nonempty var newNumbers = numbers
print(type(of: newNumbers)) // Array<Int>
// Access the modified API above via its projected value:
$numbers.append(6)
let last = $numbers.last // Int: 6
将此仓库添加为 Swift Package Manager 依赖项
.package(url: "https://github.com/noeticgarden/pico-nonempty.git", from: "1.0.0"),
然后,使用 Nonempty
模块
dependencies: [
.product(name: "Nonempty", package: "pico-nonempty"),
]
使用此仓库的 Issues 选项卡报告问题。 欢迎提交拉取请求,所有者将进行审核。 所有支持和 PR 接受均尽力而为,但不保证。 请友善。