Generic Structure

PartialRangeFrom

A partial interval extending upward from a lower bound. ある下側の境界から上向きに拡張する部分的な間隔。

Declaration 宣言

@frozen struct PartialRangeFrom<Bound> where Bound : Comparable

Overview 概要

You create PartialRangeFrom instances by using the postfix range operator (postfix ...). あなたは、PartialRangeFromインスタンスを後置範囲演算子(...)を使って作成します。


let atLeastFive = 5...

You can use a partial range to quickly check if a value is contained in a particular range of values. For example: あなたは、部分範囲を使って、ある値がいくつの値からなる部分範囲に含まれるかどうかを素早く調べることができます。例えば:


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

You can use a partial range of a collection’s indices to represent the range from the partial range’s lower bound up to the end of the collection. あなたは、あるコレクションのもつインデックスからなる部分範囲を使うことで、その部分範囲の下側の境界からそのコレクションの終わりまでの範囲を表すことができます。


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

Using a Partial Range as a Sequence 部分範囲をシーケンスとして使う

When a partial range uses integers as its lower and upper bounds, or any other type that conforms to the Strideable protocol with an integer stride, you can use that range in a for-in loop or with any sequence method that doesn’t require that the sequence is finite. The elements of a partial range are the consecutive values from its lower bound continuing upward indefinitely. ある範囲がそれの下側および上側の境界として整数を使う、または整数歩幅を使う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!"

Because a PartialRangeFrom sequence counts upward indefinitely, do not use one with methods that read the entire sequence before returning, such as map(_:), filter(_:), or suffix(_:). It is safe to use operations that put an upper limit on the number of elements they access, such as prefix(_:) or dropFirst(_:), and operations that you can guarantee will terminate, such as passing a closure you know will eventually return true to first(where:). PartialRangeFromシーケンスが上向きに無限に数えることから、返す前にシーケンス全体を読み出すメソッド、例えばmap(_:)filter(_:)、またはsuffix(_:)などを持つものと一緒に使わないでください。安全なのは、上側の限界をそれらがアクセスする要素数に置く演算、例えばprefix(_:)またはdropFirst(_:)など、そしてあなたが終わらせることができる演算、例えばあなたが結局はtruefirst(where:)に返すと知っているクロージャを渡すことなどの使用です。

In the following example, the asciiTable sequence is made by zipping together the characters in the alphabet string with a partial range starting at 65, the ASCII value of the capital letter A. Iterating over two zipped sequences continues only as long as the shorter of the two sequences, so the iteration stops at the end of alphabet. 以下の例において、asciiTableシーケンスは、alphabet文字列中の文字を65で始まるある部分範囲と一緒に閉じ合わせることによって作られます。2つの閉じ合わされたシーケンスそれらに反復することは、より短いほうと同じだけ続きます、それでこの反復は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"

The behavior of incrementing indefinitely is determined by the type of Bound. For example, iterating over an instance of PartialRangeFrom<Int> traps when the sequence’s next value would be above Int.max. 無限に漸増する挙動は、Boundの型によって決定されます。例えば、PartialRangeFrom<Int>のインスタンスの全体にわたって反復することは、そのシーケンスの次の値がInt.maxより上となる場合にトラップします。

Topics 話題

Initializers イニシャライザ

Instance Properties 様々なインスタンスプロパティ

Instance Methods インスタンスメソッド

Operator Functions 演算子関数

Relationships 関係

Conforms To 次に準拠

  • Decodable
    Conforms when Bound conforms to Decodable. BoundDecodableに準拠する時に準拠します。
  • Encodable
    Conforms when Bound conforms to Encodable. BoundEncodableに準拠する時に準拠します。
  • MLShapedArrayRangeExpression
    Conforms when Bound is Int. BoundIntである時に準拠します。
  • RangeExpression

See Also 参照

Range Expressions 範囲式