文書   >   Swift   >   Array   >   withUnsafeBufferPointer(_:)


汎用インスタンスメソッド


withUnsafeBufferPointer(_:)


配列の連続した記憶領域へのポインタでクロージャを呼び出します。





宣言


func withUnsafeBufferPointer<R>(_ body: (UnsafeBufferPointer<Element>) throws -> R) rethrows -> R


パラメータ


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(_:) の実行中にのみ有効です。後で使用するためにポインタを保管したり戻したりしないでください。


以下も見よ





基礎となる記憶領域へのアクセス

















トップへ












トップへ












トップへ












トップへ












トップへ
目次
Xcode の新機能

  • SDK
  • Xcode 10.0+
  • フレームワーク
  • Swift 標準ライブラリ

  • 宣言
  • パラメータ
  • 戻り値
  • 議論
  • 以下も見よ












  • トップへ












    トップへ












    トップへ












    トップへ