当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift PartialRangeFrom用法及代码示例


结构

PartialRangeFrom

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

声明

@frozen struct PartialRangeFrom<Bound> where Bound : Comparable

概述

您可以使用后缀范围运算符(后缀 ... )创建 PartialRangeFrom 实例。


let atLeastFive = 5...

您可以使用部分范围来快速检查某个值是否包含在特定的值范围内。例如:


atLeastFive.contains(4)
// false
atLeastFive.contains(5)
// true
atLeastFive.contains(6)
// true

您可以使用集合索引的部分范围来表示从部分范围的下限到集合末尾的范围。


let numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[3...])
// Prints "[40, 50, 60, 70]"

使用部分范围作为序列

当部分范围使用整数作为其下限和上限,或任何其他符合 Strideable 协议且具有整数步长的类型时,您可以在 for - in 循环中或任何序列方法中使用该范围这不需要序列是有限的。部分范围的元素是从其下限无限向上连续的连续值。


func isTheMagicNumber(_ x: Int) -> Bool {
    return x == 3
}


for x in 1... {
    if isTheMagicNumber(x) {
        print("\(x) is the magic number!")
        break
    } else {
        print("\(x) wasn't it...")
    }
}
// "1 wasn't it..."
// "2 wasn't it..."
// "3 is the magic number!"

因为 PartialRangeFrom 序列无限期地向上计数,所以不要将序列与在返回之前读取整个序列的方法一起使用,例如 map(_:)filter(_:)suffix(_:) 。使用对其访问的元素数量设置上限的操作是安全的,例如 prefix(_:)dropFirst(_:) ,并且您可以保证将终止的操作,例如传递您知道最终会返回的闭包 truefirst(where:)

在下面的示例中,asciiTable 序列是通过将 alphabet 字符串中的字符压缩在一起生成的,其中部分范围从 65(大写字母 A 的 ASCII 值)开始。迭代两个压缩序列仅持续两个序列中较短的一个,因此迭代在 alphabet 的末尾停止。


let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
let asciiTable = zip(65..., alphabet)
for (code, letter) in asciiTable {
    print(code, letter)
}
// "65 A"
// "66 B"
// "67 C"
// ...
// "89 Y"
// "90 Z"

无限增加的行为由 Bound 的类型决定。例如,当序列的下一个值高于 Int.max 时,迭代 PartialRangeFrom<Int> 陷阱的实例。

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 PartialRangeFrom。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。