<!--
{
  "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/BidirectionalCollection",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "Swift"
    ],
    "preciseIdentifier" : "s:SK"
  },
  "title" : "BidirectionalCollection"
}
-->

# BidirectionalCollection

A collection that supports backward as well as forward traversal.

```
protocol BidirectionalCollection<Element> : Collection where Self.Indices : BidirectionalCollection, Self.SubSequence : BidirectionalCollection
```

## Overview

Bidirectional collections offer traversal backward from any valid index,
not including a collection’s `startIndex`. Bidirectional collections can
therefore offer additional operations, such as a `last` property that
provides efficient access to the last element and a `reversed()` method
that presents the elements in reverse order. In addition, bidirectional
collections have more efficient implementations of some sequence and
collection methods, such as `suffix(_:)`.

# Conforming to the BidirectionalCollection Protocol

To add `BidirectionalProtocol` conformance to your custom types, implement
the `index(before:)` method in addition to the requirements of the
`Collection` protocol.

Indices that are moved forward and backward in a bidirectional collection
move by the same amount in each direction. That is, for any valid index `i`
into a bidirectional collection `c`:

- If `i >= c.startIndex && i < c.endIndex`, then
  `c.index(before: c.index(after: i)) == i`.
- If `i > c.startIndex && i <= c.endIndex`, then
  `c.index(after: c.index(before: i)) == i`.

Valid indices are exactly those indices that are reachable from the
collection’s `startIndex` by repeated applications of `index(after:)`, up
to, and including, the `endIndex`.

---

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)
