Generic Instance Method 総称体インスタンスメソッド

relative(to:)

Returns the range of indices described by this range expression within the given collection. 与えられたコレクション内の、この範囲式によって記述されるインデックスの範囲を返します。

Declaration 宣言

func relative<C>(to collection: C) -> Range<Self.Bound> where C : Collection, Self.Bound == C.Index

Parameters パラメータ

collection

The collection to evaluate this range expression in relation to. このコレクションに関して、この範囲式を評価します。

Return Value 戻り値

A range suitable for slicing collection. The returned range is not guaranteed to be inside the bounds of collection. Callers should apply the same preconditions to the return value as they would to a range provided directly by the user. スライスするcollectionに対して適している範囲。返される範囲は、collectionの境界内であると保証されません。呼び出し側は、同じ前提条件を戻り値に適用すべきです、それらがユーザによって直接に提供される範囲にするように。

Discussion 解説

You can use the relative(to:) method to convert a range expression, which could be missing one or both of its endpoints, into a concrete range that is bounded on both sides. The following example uses this method to convert a partial range up to 4 into a half-open range, using an array instance to add the range’s lower bound. あなたは、relative(to:)メソッドを使うことによって、それの端点の両方または1つを抜かすことができる範囲式を、両方の側で閉ざされた具体的な範囲へと変換できます。以下の例は、このメソッドを使って、4までの不完全な範囲を半開範囲へと変換します、配列インスタンスを使って範囲の下側の境界を追加しています。


let numbers = [10, 20, 30, 40, 50, 60, 70]
let upToFour = ..<4


let r1 = upToFour.relative(to: numbers)
// r1 == 0..<4

The r1 range is bounded on the lower end by 0 because that is the starting index of the numbers array. When the collection passed to relative(to:) starts with a different index, that index is used as the lower bound instead. The next example creates a slice of numbers starting at index 2, and then uses the slice with relative(to:) to convert upToFour to a concrete range. r1範囲は、0によって下端に境界をつけられます、なぜならそれがnumbers配列の開始インデックスだからです。relative(to:)に渡されるコレクションが異なるインデックスで始まる場合、そのインデックスは代わりに下側の境界として使われます。次の例は、numbersのスライスをインデックス2で開始して作成して、それからそのスライスをrelative(to:)と使うことでupToFourを具体的な範囲へ変換します。


let numbersSuffix = numbers[2...]
// numbersSuffix == [30, 40, 50, 60, 70]


let r2 = upToFour.relative(to: numbersSuffix)
// r2 == 2..<4

Use this method only if you need the concrete range it produces. To access a slice of a collection using a range expression, use the collection’s generic subscript that uses a range expression as its parameter. それが生成する具体的な範囲をあなたが必要とする場合にのみ、このメソッドを使ってください。範囲式を使ってコレクションのスライスにアクセスするには、そのコレクションの持つ総称体添え字で、範囲式をそれのパラメータとして使うものを使用してください。


let numbersPrefix = numbers[upToFour]
// numbersPrefix == [10, 20, 30, 40]