Tested on GitHub Actions

swift package Supports macOS, iOS, tvOS, watchOS, Linux, & Windows

又一个 Either 类型!🥳

世界需要另一个 Swift Either 类型吗?不需要。我们是不是患了“非我发明”综合症?也许吧。我们仍然认为这是个好主意吗?绝对是。

Either 是许多函数式和强类型语言中的一个概念,它允许在一个字段中存储要么一种类型,要么另一种类型的值。

/// A response for the population query 
struct PopulationResponse {

    /// The list of people in the population
    ///
    /// - Note: In 1.x, this was a list of names as `String`s.
    ///         In 2.x and newer, this is a map of UUIDs to `Person` objects
    let people: Either<[String], [UUID: Person]>
}

这个实现带来了一些优势

自动遵循协议

如果 EitherLeftRight 类型也遵循某些协议,则此实现会自动使 Either 的实例遵循这些协议。

目前,支持以下协议:

解包

显然,你最终需要从中获取一个值,它提供了几种方法:

LeftRight 都是相同的类型时,以下也可用:

映射

这提供了各种映射 Either 的方法。通常,这些方法将其视为只有一个元素的集合,类似于 Optional 如何被视为包含 0 或 1 个元素的集合。

转换

这允许您将某些类型的实例转换为 Either,然后再转换回来。