[英]Float-Array conversion
我有一個像這樣的向量:
vector<Vec3f> myCoolVector
它充滿了[1.0, 2.0, 3.1]
和[4.2, 2.1, 7.7]
, ...
類的數組。
我想將myCoolVector
轉換回2d-array of floats
的2d-array of floats
以將其作為簡單的多維浮點數數組發送回Swift(例如: [[Float]]
)。
但是我返回到(Swift)的是一個帶有這種瘋狂類型的變量:
Optional<UnsafeMutablePointer<Optional<UnsafeMutablePointer<Float>>>>
...而不只是這種類型:
[[Float]]
。
請看一下我的代碼:
(1)代碼-C ++ :
+(float **)myCoolFunction {
vector<Vec3f> 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
作為簡單的二維數組(如[[Float]]
回Swift?
任何幫助將不勝感激!
您的myCoolFunction
返回float **
,即指向float
指針。 而且C / C ++中的任何指針類型都不能自動轉換為Swift Array
,C / C ++中的任何其他類型都不能自動轉換為Swift Array
。
如果您確實想要Array<Array<Float>>
(又名[[Float]]
)中的結果,則需要編寫一些Swift代碼以將Optional<UnsafeMutablePointer<Optional<UnsafeMutablePointer<Float>>>>
為Array<Array<Float>>
。
像這樣:
class MyWrappter {
static func myCoolFunction(count: Int) -> [[Float]] {
let ptrPtrFloat: UnsafeMutablePointer<UnsafeMutablePointer<Float>?>! = MyBridge.myCoolFunction()
let bpPtrFloat = UnsafeBufferPointer(start: ptrPtrFloat, count: count)
return bpPtrFloat.map {ptrFloat in
[ptrFloat![0], ptrFloat![1], ptrFloat![2]]
}
}
}
請記住,您的myCoolFunction
不會返回有關vector<Vec3f>
的大小的任何信息,因此您可能需要使用其他方法將其傳遞給Swift端。
Swift不擅長優化嵌套數組。 最好考慮采用simd.float3
或類似的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.