swift - 如何转换 UnsafeMutablePointer 数组到一个 Double 数组?
问题描述
我创建了一个这样的数组
var outputReal = UnsafeMutablePointer<Double>.allocate(capacity: numeroDados)
现在我需要将其转换为Double
.
我可以使用这样的东西来转换它:
var newArray : [Double] = []
for i in 0..<n {
newArray[i] = outputReal
}
但我记得在页面上看到了另一种执行此操作的方法。
有任何想法吗?
解决方案
首先创建一个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)
在这两种情况下,值都被复制到数组的元素存储中,因此您最终必须释放分配的内存。
推荐阅读
- layout - 如何在不包含 JS/bootstrap 的情况下更改 cflayoutarea 的折叠方向?
- google-app-maker - 数据源使用什么版本的mysql?
- dialogflow-es - 如何在对话流中的一段时间后调用事件
- office-js - Script Lab 收集什么样的数据(如果有)?
- sql - SQL:发生某事时从字符串中获取所有值
- android - 在 Android 中使用 GridView 是否安全?
- unit-testing - 如何在 codeigniter 中使用 Codeception 进行单元测试?
- webots - 有没有办法在 webbots 模拟期间在场景树中添加新节点?
- java - 将 Parse SDK 添加到您的 Android 项目并在 android 版本 3.4.1 或 3.4.2 中使用 parse sdk 项目文件
- signalr - 使用不同的 IP 地址连接 Signalr Hub 和客户端