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.

type

The type of 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.

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.

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.

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