Generic Instance Method


Calls the given closure with a pointer to the array’s mutable contiguous storage.


@inline(__always) mutating func withUnsafeMutableBufferPointer<R>(_ body: (inout UnsafeMutableBufferPointer<Element>) throws -> R) rethrows -> R



A closure with an UnsafeMutableBufferPointer parameter that points to the contiguous storage for the array. If no such storage exists, it is created. If body has a return value, it is used as the return value for the withUnsafeMutableBufferPointer(_:) method. The pointer argument is valid only for the duration of the closure’s execution.

Return Value

The return value of the body closure parameter, if any.


Often, the optimizer can eliminate bounds checks within an array algorithm, but when that fails, invoking the same algorithm on the buffer pointer passed into your closure lets you trade safety for speed.

The following example shows how modifying the contents of the UnsafeMutableBufferPointer argument to body alters the contents of the array:

var numbers = [1, 2, 3, 4, 5]
numbers.withUnsafeMutableBufferPointer { buffer in
    for i in stride(from: buffer.startIndex, to: buffer.endIndex - 1, by: 2) {
        swap(&buffer[i], &buffer[i + 1])
// Prints "[2, 1, 4, 3, 5]"

The pointer passed as an argument to body is valid only for the lifetime of the closure. Do not escape it from the closure for later use.

See Also

Related Symbols

withUnsafeBufferPointer, UnsafeMutableBufferPointer