Generic Instance Method 総称体インスタンスメソッド

withUnsafeMutableBufferPointer(_:)

Calls the given closure with a pointer to the array’s mutable contiguous storage. 与えられたクロージャを配列のもつ可変の隣接ストレージへのポインタとともに呼び出します。

Declaration 宣言

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

Parameters パラメータ

body

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, that value is also used as the return value for the withUnsafeMutableBufferPointer(_:) method. The pointer argument is valid only for the duration of the method’s execution. あるクロージャでUnsafeMutableBufferPointerパラメータを持ち、それはその配列のための隣接ストレージを指し示します。そのようなストレージが存在しないならば、それは作成されます。bodyが戻り値を持つならば、その値はまたwithUnsafeMutableBufferPointer(_:)メソッドの戻り値としても使われます。ポインタ引数は、ただメソッドの実行の間に対してのみ有効です。

Return Value 戻り値

The return value, if any, of the body closure parameter. bodyクロージャパラメータの戻り値、もしあれば。

Discussion 解説

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: 以下の例は、bodyへのUnsafeMutableBufferPointer引数の内容の修正が、配列の内容を改めることを示します:


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

The pointer passed as an argument to body is valid only during the execution of withUnsafeMutableBufferPointer(_:). Do not store or return the pointer for later use. 引数としてbodyに渡されるポインタは、withUnsafeMutableBufferPointer(_:)の実行の間のみ有効です。後で使うためにポインタを格納したり返したりしないでください。

See Also 参照

Accessing Underlying Storage 基礎をなすストレージにアクセスする