文書   >   Swift   >   Array   >   withUnsafeMutableBufferPointer(_:)
汎用インスタンスメソッド
withUnsafeMutableBufferPointer(_:)
与えられたクロージャを、配列の可変の連続した記憶領域へのポインタで呼び出します。
宣言
パラメータ
body | 配列の連続した記憶領域を指す UnsafeMutableBufferPointer パラメータを持つクロージャ。そのような記憶領域が存在しない場合は、作成されます。body に戻り値がある場合、その値はまた withUnsafeMutableBufferPointer(_:) メソッドの戻り値としても使用されます。ポインタ引数は、メソッドの実行中だけ有効です。 |
戻り値
もしあれば、body クロージャパラメータの戻り値。
議論
多くの場合、最適化プログラムは配列アルゴリズム内の境界チェックを排除できますが、それが失敗した場合、クロージャに渡されたバッファポインタ上で同じアルゴリズムを呼び出すと、安全性と速度の交換が生じます。
以下の例は、UnsafeMutableBufferPointer 引数の内容を body に変更すると、配列の内容がどのように変更されるかを示しています。
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]"
body に引数として渡されるポインタは、withUnsafeMutableBufferPointer(_:) の実行中にのみ有効です。後で使用するためにポインタを保管したり戻したりしないでください。
body クロージャの実行中は、このメソッドのターゲットとなる配列については何にも依存しないでください。それは正しい値を持っていないように見えるかもしれません。代わりに、 UnsafeMutableBufferPointer 引数のみを body に使用してください。
以下も見よ
基礎となる記憶領域へのアクセス
func withUnsafeBufferPointer<R>((UnsafeBufferPointer<Element>) -> R) -> R
配列の連続した記憶領域へのポインタでクロージャを呼び出します。
func withUnsafeBytes<R>((UnsafeRawBufferPointer) -> R) -> R
与えられたクロージャを、配列の連続した記憶領域の基礎となるバイトへのポインタで呼び出します。
func withUnsafeMutableBytes<R>((UnsafeMutableRawBufferPointer) -> R) -> R
与えられたクロージャを、配列の可変の連続した記憶領域の基礎となるバイトへのポインタで呼び出します。
func withContiguousStorageIfAvailable<R>((UnsafeBufferPointer<Element>) -> R) -> R?
トップへ
トップへ
トップへ
トップへ
トップへ