文書   >   Swift   >   Array   >   withUnsafeMutableBytes(_:)
汎用インスタンスメソッド
withUnsafeMutableBytes(_:)
与えられたクロージャを、配列の可変の連続した記憶領域の基礎となるバイトへのポインタで呼び出します。
宣言
パラメータ
body | 配列の連続した記憶領域を指す UnsafeMutableRawBufferPointer パラメータを持つクロージャ。そのような記憶領域が存在しない場合は、作成されます。body に戻り値がある場合、その値はまた withUnsafeMutableBytes(_:) メソッドの戻り値としても使用されます。引数は、クロージャの実行中だけ有効です。 |
戻り値
もしあれば、body クロージャパラメータの戻り値。
議論
配列の Element 型は 些細な型 (trivial type) でなければなりません。これは、間接操作や参照カウント操作を行わずに、ビット単位でコピーできます。一般的に、強いまたは弱い参照を含まないネイティブの Swift 型は、インポートされた C 構造体および列挙型と同様に、些細です。
以下の例では、byteValues 配列からバイトを Int の配列にコピーします。
var numbers = [Int32] = [0, 0]
var byteValues: [UInt8] = [0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00]
numbers.withUnsafeMutableBytes { destBytes in
byteValues.withUnsafeBytes { srcBytes in
destBytes.copyBytes(from: srcBytes)
}
}
// numbers == [1, 2]
body に引数として渡されたポインタはクロージャの寿命中だけ有効です。後で使用するためにクロージャからそれをエスケープしないでください。
body クロージャの実行中は、このメソッドのターゲットとなる配列については何にも依存しないでください。それは正しい値を持っていないように見えるかもしれません。代わりに、 UnsafeMutableRawBufferPointer 引数のみを body に使用してください。
以下も見よ
基礎となる記憶領域へのアクセス
func withUnsafeBufferPointer<R>((UnsafeBufferPointer<Element>) -> R) -> R
配列の連続した記憶領域へのポインタでクロージャを呼び出します。
与えられたクロージャを、配列の可変の連続した記憶領域へのポインタで呼び出します。
func withUnsafeBytes<R>((UnsafeRawBufferPointer) -> R) -> R
与えられたクロージャを、配列の連続した記憶領域の基礎となるバイトへのポインタで呼び出します。
func withContiguousStorageIfAvailable<R>((UnsafeBufferPointer<Element>) -> R) -> R?
トップへ
トップへ
トップへ
トップへ
トップへ