如何在 Swift 中从 [Float] 转换为 UnsafeMutablePointer<Float>?

Boo*_*oon 1 pointers swift

我有一个 Float 数组(即 [Float]),我需要从 Swift 调用一个需要UnsafeMutablePointer<Float>. 进行转换的正确方法是什么?

Som*_*o'z 5

斯威夫特 4/5:

如果要将“Float”数组复制新分配的内存中,请使用以下代码:

// A float array
let floats : [Float] = [/* ... */] 

// Allocating sufficient space to store or data
let pointerToFloats = UnsafeMutablePointer<Float>.allocate(capacity: floats.count)

// Copying our data into the freshly allocated memory 
pointerToFloats.assign(from: floats, count: floats.count)

// Here you can use your pointer and pass it to any function
pointerWork(pointerToFloats)
Run Code Online (Sandbox Code Playgroud)

但是,如果您想使用当前数组的 相同内存,请使用以下行:

let pointerToFloats = UnsafeMutablePointer<Float>.init(mutating: floats)
Run Code Online (Sandbox Code Playgroud)

在这里,您不必将数据分配给内存,因为指针引用浮点数组的同一连续内存

  • 我选择了最后一行,由于一些奇怪的原因,我不得不删除 Swift 4.2 中的“.init”并只使用:let pointToFloats = UnsafeMutablePointer&lt;Float&gt;(mutating: floats) (2认同)