文書   >   Swift   >   Swift 標準ライブラリ   >   Collections   >   Sequence and Collection Protocols   >   Collection   >   index(_:offsetBy:limitedBy:)
インスタンスメソッド
index(_:offsetBy:limitedBy:)
与えられた限界のインデックスを越えた距離でなければ、与えられたインデックスから指定された距離にあるインデックスを返します。
必須。 デフォルトの実装が提供されます。
宣言
func index(_ i: Self.Index, offsetBy distance: Int, limitedBy limit: Self.Index) -> Self.Index?
パラメータ
i | コレクションの有効なインデックス。 |
distance | offset i までの距離。コレクションが BidirectionalCollection プロトコルに準拠していない場合、 distance は負であってはなりません。 |
limit | 限界として使用するコレクションの有効なインデックス。distance > 0 の場合、i 未満の限界は無効です。同様に、distance < 0 の場合、i より大きい限界は無効です。 |
戻り値
そのインデックスが移動方向の限界を超えない場合、インデックス i からの distance だけオフセットされたインデックス。その場合、このメソッドは nil を返します。
議論
以下の例では、文字列の開始インデックスから 4 つだけ進んだ位置にあるインデックスを取得し、その位置にある文字を表示します。この操作は、限界の s.endIndex 値を超える必要はないため、成功します。
let s = "Swift"
if let i = s.index(s.startIndex, offsetBy: 4, limitedBy: s.endIndex) {
print(s[i])
}
// Prints "t"
次の例では、s.startIndex から 6 つの位置にあるインデックスを取得しようとしますが、その距離は limit として渡されたインデックスを超えているため失敗します。
let j = s.index(s.startIndex, offsetBy: 6, limitedBy: s.endIndex)
print(j)
// Prints "nil"
distance として渡された値は、インデックスが limit として渡されない限り、これらの境界を超えてオフセットすることはできないため、コレクションの範囲を超えて i をオフセットしてはなりません。
複雑さ:コレクションが RandomAccessCollection に準拠している場合は O(1)。そうでなければ、O(k)、ここで k は distance の絶対値です。
デフォルトの実装
コレクションの実装
func index<T>(Self.Index, offsetBy: T, limitedBy: Self.Index) -> Self.Index?
与えられた限界のインデックスを越えた距離でなければ、与えられたインデックスから指定された距離にあるインデックスを返します。
    廃止  
func index(Self.Index, offsetBy: Int, limitedBy: Self.Index) -> Self.Index?
与えられた限界のインデックスを越えた距離でなければ、与えられたインデックスから指定された距離にあるインデックスを返します。