2016-12-03 20 views
0

我收到以下錯誤這樣的說法:如何更新Swift 3的UnsafePointer數據聲明?

let data = Data(bytes: UnsafePointer<UInt8>(cubeData), count: cubeData.count * MemoryLayout<Float>.size) 

cubeData被定義爲:var cubeData = [Float](repeating: 0, count: size * size * size * 4)

錯誤:

'init' is unavailable: use 'withMemoryRebound(to:capacity:_)' to temporarily view memory as another layout-compatible type. 

我該如何解決這個問題?

謝謝!

+0

所以'cubeData'是'[Float]'? – kennytm

+0

糟糕。我已更新我的問題 –

回答

2

您可以使用Array.withUnsafeBufferPointer來獲取緩衝區指針(即指向具有其長度的數組的指針)。然後使用Data.init(buffer:)從緩衝區指針啓動數據。

let cubeData: [Float] = [1.1, 2.2, 3.3, 4.4] 

let b = cubeData.withUnsafeBufferPointer { Data(buffer: $0) } 

print(b as NSData) 
// <cdcc8c3f cdcc0c40 33335340 cdcc8c40> 
+0

完美運作。非常感謝您的快速響應。 –