UnsafeMutableRawPointer(Swift 3中的新增功能)指向的一个字节如何从内存中访问字节(或Int16,float等),然后由C API(核心音频等)传递给Swift函数。
load<T>从内存中读取原始字节并构造一个type值T:
load<T>
T
let ptr = ... // Unsafe[Mutable]RawPointer let i16 = ptr.load(as: UInt16.self)
(可选)字节偏移量:
let i16 = ptr.load(fromByteOffset: 4, as: UInt16.self)
还有assumingMemoryBound(),从一个转换Unsafe[Mutable]RawPointer到一个Unsafe[Mutable]Pointer<T>,假设被指向的存储器包含类型T的值:
assumingMemoryBound()
Unsafe[Mutable]RawPointer
Unsafe[Mutable]Pointer<T>
let i16 = ptr.assumingMemoryBound(to: UInt16.self).pointee
对于值数组,您可以创建“缓冲区指针”:
let i16bufptr = UnsafeBufferPointer(start: ptr.assumingMemoryBound(to: UInt16.self), count: count)
缓冲区指针可能已经足够满足您的目的,它可以下标,并且可以类似于数组进行枚举。如有必要,从缓冲区指针创建一个数组:
let i16array = Array(i16bufptr)
正如@Hamish所说,可以在以下位置找到更多信息和详细信息: