浮点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
或类似的东西。