當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。