浮点arrays转换

我有一个这样的矢量:

vector myCoolVector 

充满了像[1.0, 2.0, 3.1][4.2, 2.1, 7.7]...等数组。


我想将myCoolVector转换回2d-array of floats float数组 ,将其作为简单的多维Float数组发送回Swift(如: [[Float]] )。

但我得到的回复(对Swift)是一个变量与这种疯狂的类型:

 Optional<UnsafeMutablePointer<Optional<UnsafeMutablePointer>>> 

……而不仅仅是这种类型: [[Float]]

请看看我的代码:

(1)代码 – C ++

 +(float **)myCoolFunction { vector myCoolVector // here fillMyCoolVector() fills the myCoolVector - NICE float **floatArrayBackToSwift; floatArrayBackToSwift = new float*[myCoolVector.size()]; for( size_t i = 0; i < myCoolVector.size(); i++ ) { ary[i] = new float[3]; ary[i][0] = myCoolVector[i][0]; ary[i][1] = myCoolVector[i][1]; ary[i][2] = myCoolVector[i][2]; } return floatArrayBackToSwift; } 

(2)代码 – Swift

 let floatArray = MyBridge.myCoolFunction() // should be [[1.0, 2.0, 3.1], [4.2, 2.1, 7.7], ...] print(floatArray) 

我的问题: 如何将myCoolVector作为一个简单的2d-Array(如[[Float]]回Swift?

任何帮助将非常感谢!

你的myCoolFunction返回float ** ,指向float指针。 并且C / C ++中的任何指针类型都不能自动转换为Swift Array ,也不能转换为C / C ++中的任何其他类型。

如果你真的想要结果在Array> (又名[[Float]] ),你需要编写一些Swift代码来将Optional>>>Array>

像这样的东西:

 class MyWrappter { static func myCoolFunction(count: Int) -> [[Float]] { let ptrPtrFloat: UnsafeMutablePointer?>! = MyBridge.myCoolFunction() let bpPtrFloat = UnsafeBufferPointer(start: ptrPtrFloat, count: count) return bpPtrFloat.map {ptrFloat in [ptrFloat![0], ptrFloat![1], ptrFloat![2]] } } } 

请记住, myCoolFunction不会返回有关vector大小的任何信息,因此您可能需要使用其他方法将其传递给Swift端。


Swift不擅长优化嵌套数组。 最好考虑采用simd.float3或类似的东西。

Interesting Posts