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

# UnsafeRawBufferPointer

A  nonowning collection interface to the bytes in a
region of memory.

```
@frozen struct UnsafeRawBufferPointer
```

## Overview

You can use an `UnsafeRawBufferPointer` instance in low-level operations to eliminate
uniqueness checks and release mode bounds checks. Bounds checks are always
performed in debug mode.

An `UnsafeRawBufferPointer` instance is a view of the raw bytes in a region of memory.
Each byte in memory is viewed as a `UInt8` value independent of the type
of values held in that memory. Reading from memory through a raw buffer is
an untyped operation.

In addition to its collection interface, an `UnsafeRawBufferPointer`
instance also supports the `load(fromByteOffset:as:)`
and `loadUnaligned(fromByteOffset:as:)` methods provided by
`UnsafeRawPointer`, including bounds checks in debug mode.

To access the underlying memory through typed operations, the memory must
be bound to a trivial type.

> Note: A *trivial type* can be copied bit for bit with no indirection
> or reference-counting operations. Generally, native Swift types that do
> not contain strong or weak references or other forms of indirection are
> trivial, as are imported C structs and enums. Copying memory that
> contains values of nontrivial types can only be done safely with a typed
> pointer. Copying bytes directly from nontrivial, in-memory values does
> not produce valid copies and can only be done by calling a C API, such as
> `memmove()`.

# UnsafeRawBufferPointer Semantics

An `UnsafeRawBufferPointer` instance is a view into memory and does not own the memory
that it references. Copying a variable or constant of type `UnsafeRawBufferPointer` does
not copy the underlying memory. However, initializing another collection
with an `UnsafeRawBufferPointer` instance copies bytes out of the referenced memory and
into the new collection.

The following example uses `someBytes`, an `UnsafeRawBufferPointer` instance, to
demonstrate the difference between assigning a buffer pointer and using a
buffer pointer as the source for another collection’s elements. Here, the
assignment to `destBytes` creates a new, nonowning buffer pointer
covering the first `n` bytes of the memory that `someBytes`
references—nothing is copied:

```
var destBytes = someBytes[0..<n]
```

Next, the bytes referenced by `destBytes` are copied into `byteArray`, a
new `[UInt8]` array, and then the remainder of `someBytes` is appended to
`byteArray`:

```
var byteArray: [UInt8] = Array(destBytes)
byteArray += someBytes[n..<someBytes.count]
```

---

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)