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

storeBytes(of:toByteOffset:as:)

Stores the given value’s bytes into raw memory at the specified offset. 与えられた値のもつバイトを生のメモリへ指定されたオフセットで格納します。

Declaration 宣言

func storeBytes<T>(of value: T, toByteOffset offset: Int = 0, as type: T.Type)

Parameters パラメータ

value

The value to store as raw bytes. 生のメモリとして格納されることになる値。

offset

The offset from this pointer, in bytes. offset must be nonnegative. The default is zero. このポインタからのオフセット、バイトで。offsetは、非負でなければなりません。初期状態はゼロです。

type

The type of value. valueの型。

Discussion 解説

The type T to be stored must be a trivial type. The memory at this pointer plus offset must be properly aligned for accessing T. The memory must also be uninitialized, initialized to T, or initialized to another trivial type that is layout compatible with T. 格納されることになる型Tは、自明型でなければなりません。offsetを加えたこのポインタでのメモリは、Tにアクセスするために適切にアラインされる必要があります。メモリはまた、未初期化状態にされる、Tに初期化される、または別の自明型でTとレイアウト互換なものに初期化される必要があります。

After calling storeBytes(of:toByteOffset:as:), the memory is initialized to the raw bytes of value. If the memory is bound to a type U that is layout compatible with T, then it contains a value of type U. Calling storeBytes(of:toByteOffset:as:) does not change the bound type of the memory. storeBytes(of:toByteOffset:as:)を呼び出した後、メモリはvalueの生のバイトに初期化されます。メモリが型UTとレイアウト互換であるものに束縛されるならば、そのときそれは型Uの値を含みます。storeBytes(of:toByteOffset:as:)を呼び出すことは、そのメモリの束縛される型を変更しません。

If you need to store a copy of a nontrivial value into memory, or to store a value into memory that contains a nontrivial value, you cannot use the storeBytes(of:toByteOffset:as:) method. Instead, you must know the type of value previously in memory and initialize or assign the memory. For example, to replace a value stored in a raw pointer p, where U is the current type and T is the new type, use a typed pointer to access and deinitialize the current value before initializing the memory with a new value. あなたが非自明の値のコピーをメモリに格納する、またはある値を非自明の値を含むメモリに格納する必要がある場合、あなたはstoreBytes(of:toByteOffset:as:)メソッドを使うことはできません。代わりに、あなたは前もってメモリ中の値の型を知っていて、メモリを初期化またはアサインする必要があります。例えば、生のポインタpに格納される値を置き換えるには、そこでUは現在の型でTは新しい型です、型付ポインタを使ってアクセスして現在の値をデイニシャライズしてください、新しい値でメモリを初期化する前にです。


let typedPointer = p.bindMemory(to: U.self, capacity: 1)
typedPointer.deinitialize(count: 1)
p.initializeMemory(as: T.self, repeating: newValue, count: 1)