在Swift中探索范围类型

Swift 3版本附带的许多很棒的功能之一是Swift标准库中的Range API,自那时以来,它一直在不断改进。 在此之前,我们只有NSRange,它是Foundation框架的一部分。

在今天的文章中,我将尝试解释有关Range,ClosedRange,PartialRangeUpTo,PartialRangeThrough和CountableRange的知识,所有这些类型的范围之间的区别以及如何使用它们。

所以…开始吧

首先,让我们讨论范围,然后再探讨其他范围。

从Apple标准库提供的文档范围是…

一个可比类型的半开间隔,从下限到上限(但不包括上限)。

范围类型具有Bound泛型类型,可以是符合Comparable协议的任何类型。 这意味着您可以使用Int,Double,String…甚至您自己的自定义类型创建范围,因为它们符合Comparable协议。

从Apple标准库文档中,ClosedRange是…

从下限到上限(包括上限)的可比较类型上的间隔。

Range和ClosedRange之间的唯一区别是ClosedRange包含上限。

根据Apple标准库文档,CountableRange是…

从Swift 4.1开始,只是Range 的类型别名,其中Bound符合Strideable和Bound.Stride符合SignedInteger。

正如您将在下面在类型别名的定义中看到的那样。

通过利用条件一致性,Range符合Sequence,Collection,BidirectionalCollection,RandomAccessCollection,其中Bound符合Strideable和Bound.Stride符合SignedInteger,即CountableRange。

如您所见,标准库源中的条件一致性定义位于stdlib / public / core / Range.swift上

因此,您可以将范围用作集合,并可以使用距离,索引,反向,映射,过滤器等功能……

相同的规则应用于CountableClosedRange ,不同之处是ClosedRange 的类型别名,对Strideable和Bound应用相同的一致性。对SignedInteger约束的跨度一致性。

现在,上限已包含在集合中。

OBS:仅进行了数组转换,因此我们可以在操场上看到范围和封闭区域已经是Collection。

再次……

根据Apple标准库文档,PartialRangeUpTo是…

部分半开间隔,但不包括上限。

与Range相同,但只有上限。

再一次 …

从Apple标准库文档中可以找到PartialRangeThrough…

部分半开间隔,直到并包括一个上限。

与ClosedRange相同,但是只有上限。

我发誓这是最后一个……

根据Apple标准库文档,PartialRangeFrom是…

从下限向上延伸的部分间隔。

与ClosedRange相同,但只有下限。

协议RangeExpression是所有这些类型的范围都遵循的协议之一,它定义了一个名为contains的方法,该方法可以验证值是否包含在范围内。 也有〜=运算符执行相同的检查。

如您所见,它非常简单而且非常有用。 如果您好奇并想了解如何在后台实现这些类型,可以在Swift的Repo的stdlib / public / core / Range.swift上查看标准库源代码。

根据定义,RangeExpression是“可用于对集合进行切片的类型。” 当您想围绕所有范围类型定义泛型函数,而不必仅为了采用不同的Range变体类型来执行诸如contains之类的操作而重复实现时,它也非常有用。

这就是全部,希望您喜欢🙂

如果我有问题或您有任何意见或疑问,请告诉我。 我很高兴收到您的反馈,因此我可以使下一篇文章更好一点better

您可以在Twitter上的@ LucianoPassos11上找到我,也可以在LucianoAlmeida的github上找到我。

感谢您阅读🙂

Interesting Posts