Instance Method

# index(_:offsetBy:limitedBy:)

Returns an index that is the specified distance from the given index, unless that distance is beyond a given limiting index.

## Parameters

`i`

A valid index of the array.

`distance`

The distance to offset `i`.

`limit`

A valid index of the collection to use as a limit. If `distance > 0`, `limit` should be greater than `i` to have any effect. Likewise, if `distance < 0`, `limit` should be less than `i` to have any effect.

## Return Value

An index offset by `distance` from the index `i`, unless that index would be beyond `limit` in the direction of movement. In that case, the method returns `nil`.

## Discussion

The following example obtains an index advanced four positions from an array’s starting index and then prints the element at that position. The operation doesn’t require going beyond the limiting `numbers.endIndex` value, so it succeeds.

The next example attempts to retrieve an index ten positions from `numbers.startIndex`, but fails, because that distance is beyond the index passed as `limit`.

The value passed as `distance` must not offset `i` beyond the bounds of the collection, unless the index passed as `limit` prevents offsetting beyond those bounds.

Complexity: O(1)

### Manipulating Indices

`var startIndex: Bound`

The position of the first element in a nonempty collection.

`var endIndex: Bound`

The collection’s “past the end” position—that is, the position one greater than the last valid subscript argument.

`var indices: Range<Bound>`

The indices that are valid for subscripting the collection, in ascending order.

`var indices: Range<Bound>`

The indices that are valid for subscripting the range, in ascending order.

`func index(after: Range<Bound>.Index) -> Range<Bound>.Index`

Returns the position immediately after the given index.

`func formIndex(after: inout Bound)`

Replaces the given index with its successor.

`func index(before: Range<Bound>.Index) -> Range<Bound>.Index`

Returns the position immediately before the given index.

`func formIndex(before: inout Bound)`

Replaces the given index with its predecessor.

`func formIndex(inout Bound, offsetBy: Int)`

Offsets the given index by the specified distance.

`func index(Range<Bound>.Index, offsetBy: Int) -> Range<Bound>.Index`

Returns an index that is the specified distance from the given index.

`func formIndex(inout Bound, offsetBy: Int, limitedBy: Bound) -> Bool`

Offsets the given index by the specified distance, or so that it equals the given limiting index.

`func distance(from: Range<Bound>.Index, to: Range<Bound>.Index) -> Int`

Returns the distance between two indices.

`func hash(into: inout Hasher)`

Hashes the essential components of this value by feeding them into the given hasher.