首页 > 解决方案 > 如何转换 UnsafeMutablePointer 数组到一个 Double 数组?

问题描述

我创建了一个这样的数组

var outputReal = UnsafeMutablePointer<Double>.allocate(capacity: numeroDados)

现在我需要将其转换为Double.

我可以使用这样的东西来转换它:

var newArray : [Double] = []

for i in 0..<n {
  newArray[i] = outputReal
}

但我记得在页面上看到了另一种执行此操作的方法。

有任何想法吗?

标签: swiftunsafe-pointers

解决方案


首先创建一个UnsafeBufferPointer<Double>引用相同的内存区域。这样Collection您就可以从该内存中创建和初始化一个数组:

let bufPtr = UnsafeBufferPointer(start: outputReal, count: numeroDados)
let newArray = Array(bufPtr)

或者,首先分配一个UnsafeMutableBufferPointer(同时保存已分配内存的地址和大小):

let numeroDados = 10

let outputReal = UnsafeMutableBufferPointer<Double>.allocate(capacity: numeroDados)
outputReal.initialize(repeating: 0.0)

let newArray = Array(outputReal)

在这两种情况下,值都被复制到数组的元素存储中,因此您最终必须释放分配的内存。


推荐阅读