<!--
{
  "availability" : [
    "iOS: 8.0.0 -",
    "iPadOS: 8.0.0 -",
    "macCatalyst: 13.0.0 -",
    "macOS: 10.10.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Swift",
  "identifier" : "/documentation/Swift/ArraySlice/index(_:offsetBy:limitedBy:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Swift"
    ],
    "preciseIdentifier" : "s:s10ArraySliceV5index_8offsetBy07limitedE0SiSgSi_S2itF"
  },
  "title" : "index(_:offsetBy:limitedBy:)"
}
-->

# index(_:offsetBy:limitedBy:)

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

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

## 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` has no effect if it is less than `i`.
Likewise, if `distance < 0`, `limit` has no effect if it is greater
than `i`.

## 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.

```
let numbers = [10, 20, 30, 40, 50]
if let i = numbers.index(numbers.startIndex,
                         offsetBy: 4,
                         limitedBy: numbers.endIndex) {
    print(numbers[i])
}
// Prints "50"
```

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`.

```
let j = numbers.index(numbers.startIndex,
                      offsetBy: 10,
                      limitedBy: numbers.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)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)