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.

Declaration

func index(_ i: Int, offsetBy distance: Int, limitedBy limit: Int) -> Int?

Parameters

i

A valid index of the collection.

distance

The distance to offset i. distance must not be negative unless the collection conforms to the BidirectionalCollection protocol.

limit

A valid index of the collection to use as a limit. If distance > 0, a limit that is less than i has no effect. Likewise, if distance < 0, a limit that is greater than i has no 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 a string’s starting index and then prints the character at that position. The operation doesn’t require going beyond the limiting s.endIndex value, so it succeeds.

let s = "Swift"
if let i = s.index(s.startIndex, offsetBy: 4, limitedBy: s.endIndex) {
    print(s[i])
}
// Prints "t"

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

let j = s.index(s.startIndex, offsetBy: 6, limitedBy: s.endIndex)
print(j)
// Prints "nil"

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) if the collection conforms to RandomAccessCollection; otherwise, O(k), where k is the absolute value of distance.

See Also

Manipulating Indices

var indices: DefaultIndices<Scene.AnchorCollection>

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

func index(Int, offsetBy: Int) -> Int

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

func index(of: HasAnchoring) -> Int?

Returns the first index where the specified value appears in the collection.

Deprecated
func firstIndex(of: HasAnchoring) -> Int?

Returns the first index where the specified value appears in the collection.

func firstIndex(where: (HasAnchoring) -> Bool) -> Int?

Returns the first index in which an element of the collection satisfies the given predicate.

func formIndex(inout Int, offsetBy: Int)

Offsets the given index by the specified distance.

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

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

func formIndex(after: inout Int)

Replaces the given index with its successor.

func distance(from: Int, to: Int) -> Int

Returns the distance between two indices.