Tag: Stdlib

在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 / […]