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

withMemoryRebound(to:capacity:_:)

Executes the given closure while temporarily binding the specified number of instances to the given type. 与えられたクロージャを実行します、その間は指定された数のインスタンスを与えられた型に一時的に束縛しています。

Declaration 宣言

func withMemoryRebound<T, Result>(to type: T.Type, capacity count: Int, _ body: (UnsafeMutablePointer<T>) throws -> Result) rethrows -> Result

Parameters パラメータ

type

The type to temporarily bind the memory referenced by this pointer. The type T must be the same size and be layout compatible with the pointer’s Pointee type. このポインタによって参照されるメモリを一時的に束縛する型。型 Tは、ポインタのもつPointee型と同じサイズで、互換性のあるレイアウトでなければなりません。

count

The number of instances of Pointee to bind to type. Pointeeのインスタンスの数、typeに束縛されることになります。

body

A closure that takes a mutable typed pointer to the same memory as this pointer, only bound to type T. The closure’s pointer argument is valid only for the duration of the closure’s execution. If body has a return value, that value is also used as the return value for the withMemoryRebound(to:capacity:_:) method. あるクロージャ、それは、型Tに束縛しただけの、このポインタと同じメモリへの可変の型付ポインタをとります。クロージャのもつポインタ引数は、このクロージャの実行の間に対してだけ有効です。bodyが戻り値を持つならば、その値はまたwithMemoryRebound(to:capacity:_:)メソッドの戻り値としても使われます。

Return Value 戻り値

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

Discussion 解説

Use this method when you have a pointer to memory bound to one type and you need to access that memory as instances of another type. Accessing memory as a type T requires that the memory be bound to that type. A memory location may only be bound to one type at a time, so accessing the same memory as an unrelated type without first rebinding the memory is undefined. このメソッドを、あなたがある型に束縛されたメモリへのポインタを持つ、そしてあなたがそのメモリに別の型のインスタンスとしてアクセスする必要がある場合に使ってください。メモリにある型Tとしてアクセスすることは、メモリがその型に束縛されることを必要とします。あるメモリ位置は一度に1つの型へとバインド(束縛)されるだけでしょう、なので同じメモリに関連のない型として最初にメモリ再バインドすることなしにアクセスすることは、未定義となります。

The region of memory starting at this pointer and covering count instances of the pointer’s Pointee type must be initialized. このポインタで始まりそしてポインタのもつPointee型のcount個のインスタンスを対象とするメモリ領域は、初期化されなければなりません。

The following example temporarily rebinds the memory of a UInt64 pointer to Int64, then accesses a property on the signed integer. 以下の例は、 一時的にUInt64ポインタのメモリをInt64に再束縛します、それから符号付き整数上のあるプロパティにアクセスします。


let uint64Pointer: UnsafeMutablePointer<UInt64> = fetchValue()
let isNegative = uint64Pointer.withMemoryRebound(to: Int64.self, capacity: 1) { ptr in
    return ptr.pointee < 0
}

Because this pointer’s memory is no longer bound to its Pointee type while the body closure executes, do not access memory using the original pointer from within body. Instead, use the body closure’s pointer argument to access the values in memory as instances of type T. このポインタのメモリがそれのPointee型にはbodyクロージャの実行の間はもはや束縛されないことから、メモリにオリジナルのポインタを使ってbody内からアクセスしないでください。代わりに、bodyクロージャのもつポインタ引数を使うことで、メモリの中の値に型Tのインスタンスとしてアクセスしてください。

After executing body, this method rebinds memory back to the original Pointee type. body実行の後、このメソッドは、オリジナルのPointee型へとメモリを再束縛し戻します。