我有一个在2D数组上运行的C函数。
我想与Swift中的这个C函数进行交互。
我试试;但是,我收到了一个错误。我正在粘贴相关代码。
谢谢!
///// C Code
#include "test.h"
void test(int N, int J, double arr[J][N], double arr2[J][N]) {
for (int i = 0; i < N; i++) {
arr2[J][i] = arr[J][i];
}
}
///// C Header
#include <stdio.h>
void test(
int N, int J, double arr[J][N], double arr2[J][N]);
///// Call from Swift
let a = [[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]]
let arr = UnsafeMutablePointer<Any>.allocate(capacity: 1)
arr.initialize(to: a) // intialize with a value
let arrs = OpaquePointer(arr)
let a2 = [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]
let arr2 = UnsafeMutablePointer<Any>.allocate(capacity: 1)
arr2.initialize(to: a2) // intialize with a value
let arrs2 = OpaquePointer(arr2)
let j = a.count
let n = a[0].count
test (Int32(n), Int32(j), arrs, arrs2)
let yiii = UnsafeMutablePointer<Any>(arrs2)
let yii = Array(UnsafeBufferPointer(start: yiii, count: n))
print(yii) // Trying to get values (ans)
// Throws error:
线程1:EXC_BAD_ACCESS(代码= 1,地址= 0xfffffffffffffff8)
总结一下:Swift没有等效的C n维数组。您可以创建嵌套的数组数组,但如果您的目标是操作映射到C风格的2D数组的共享内存结构,则必须创建一个映射到内存缓冲区的一维数组,并自己进行索引数学运算。
或者,您可以将C / Objective-C代码与Swift程序链接,并将代码保留在C.