ios – 从C api接收多维数组,如何在Swift中处理?

ios – 从C api接收多维数组,如何在Swift中处理?,第1张

概述我在我的 Swift应用程序中使用了一个C库,我无法弄清楚如何获得C方法应该返回的多维数组. 我从C API收到这个: struct resultArray{ double *data; int size[2];}; 哪里: size =矩阵大小,一个包含行数和列数的双元素数组 data =矩阵数据 在swift中,我可以执行以下 *** 作来获取大小: let numRows = I 我在我的 Swift应用程序中使用了一个C库,我无法弄清楚如何获得C方法应该返回的多维数组.

我从C API收到这个:

struct resultArray{    double *data;    int size[2];};

哪里:

size =矩阵大小,一个包含行数和列数的双元素数组

data =矩阵数据

在swift中,我可以执行以下 *** 作来获取大小:

let numRows = Int(results.size.0)let numColoumns = Int(results.size.1)

但我不明白如何获得矩阵,以便我可以迭代它?我尝试了以下方法:

let matrixResult = results.data.memory

这似乎只返回一个double值,因为matrixResult变为Double.

然后我尝试了这个:

let matrixResult = results.data

这使得matrixResult成为:

UnsafeMutablePointer<Double>

我希望收到C库文档中指定的矩阵.然后我想迭代这个矩阵并从第一行获取值并将其放入Swift数组中…有人知道我在这里缺少什么吗?

解决方法 C中没有矩阵类型.假设数据是指针
将连续的矩阵元素存储为数组,您将复制
第一行到Swift数组

let firstRow = Array(UnsafeBufferPointer(start: results.data,count: numColumns))

和整个“矩阵”到一个嵌套的Swift数组

let matrix = (0 ..< numRows).map { row in    Array(UnsafeBufferPointer(start: results.data + numColumns * row,count: numColumns))}

或者(这类似于Melifaro suggested),您可以创建一个数组
指向矩阵行的指针:

let matrix = (0 ..< numRows).map { row in    UnsafeBufferPointer(start: results.data + numColumns * row,count: numColumns)}

这仍然允许以类似矩阵的方式处理任意元素

let element = matrix[row][col]

但不会复制数据.当然这需要矩阵数据在整个矩阵的使用中有效,因为内存不受管理通过斯威夫特.

总结

以上是内存溢出为你收集整理的ios – 从C api接收多维数组,如何在Swift中处理?全部内容,希望文章能够帮你解决ios – 从C api接收多维数组,如何在Swift中处理?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存