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

时间:2017-10-06 02:22:12

标签: swift pointers

我有一个Float数组(即[Float]),我需要从Swift调用一个期望Spark::swap('UpdateTeamMember', 'App\Swap\UpdateTeamMember');的C函数。什么是正确的转换方式?

3 个答案:

答案 0 :(得分:1)

快捷键4:

如果您要 复制 您的“浮动”数组 一个 新分配的内存 使用以下代码:

// 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)

但是,如果您要 使用 与当前阵列相同的内存 ,请使用以下行:

let pointerToFloats = UnsafeMutablePointer<Float>.init(mutating: floats)
  

这里您不必将数据分配到内存,因为   指针引用您的float数组的相同连续内存

答案 1 :(得分:0)

当我尝试进行相同的转换时,我使用了以下代码:

event.preventDefault()

我不确定这是最好的方法,但它对我有用

答案 2 :(得分:0)

buffer.contents().assumingMemoryBound(to: Float.self)

这里缓冲区是您分配的内存。 contents()返回此内存的指针,然后assumingMemoryBound对该类型的内存块进行类型转换。