文書   >   Swift   >   Array   >   withUnsafeBufferPointer(_:)
汎用インスタンスメソッド
withUnsafeBufferPointer(_:)
配列の連続した記憶領域へのポインタでクロージャを呼び出します。
宣言
パラメータ
body | 配列の連続した記憶領域を指す UnsafeBufferPointer パラメータを持つクロージャ。そのような記憶領域が存在しない場合は、作成されます。body に戻り値がある場合、その値はまた withUnsafeBufferPointer(_:) メソッドの戻り値としても使用されます。ポインタ引数は、メソッドの実行中だけ有効です。 |
戻り値
もしあれば、body クロージャパラメータの戻り値。
議論
多くの場合、最適化プログラムは配列アルゴリズム内の境界チェックを排除できますが、それが失敗した場合、クロージャに渡されたバッファポインタ上で同じアルゴリズムを呼び出すと、安全性と速度の交換が生じます。
以下の例は、バッファポインタの内容を反復処理する方法を示しています。
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.withUnsafeBufferPointer { buffer -> Int in
var result = 0
for i in stride(from: buffer.startIndex, to: buffer.endIndex, by: 2) {
result += buffer[i]
}
return result
}
// 'sum' == 9
body に引数として渡されるポインタは、withUnsafeBufferPointer(_:) の実行中にのみ有効です。後で使用するためにポインタを保管したり戻したりしないでください。
以下も見よ
基礎となる記憶領域へのアクセス
与えられたクロージャを、配列の可変の連続した記憶領域へのポインタで呼び出します。
func withUnsafeBytes<R>((UnsafeRawBufferPointer) -> R) -> R
与えられたクロージャを、配列の連続した記憶領域の基礎となるバイトへのポインタで呼び出します。
func withUnsafeMutableBytes<R>((UnsafeMutableRawBufferPointer) -> R) -> R
与えられたクロージャを、配列の可変の連続した記憶領域の基礎となるバイトへのポインタで呼び出します。
func withContiguousStorageIfAvailable<R>((UnsafeBufferPointer<Element>) -> R) -> R?
トップへ
トップへ
トップへ
トップへ
トップへ