2016-12-03 1 views
0

Je reçois l'erreur ci-dessous pour cette déclaration:Comment mettre à jour une instruction de Data of UnsafePointer pour Swift 3?

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

cubeData est défini comme: var cubeData = [Float](repeating: 0, count: size * size * size * 4)

Erreur:

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

Comment puis-je résoudre ce problème?

Merci!

+0

Donc 'cubeData' est un' [Float] '? – kennytm

+0

Oups. J'ai mis à jour ma question –

Répondre

2

Vous pouvez utiliser Array.withUnsafeBufferPointer pour obtenir un pointeur de tampon (c'est-à-dire un pointeur sur un tableau avec sa longueur). Ensuite, utilisez Data.init(buffer:) pour initialiser les données à partir d'un pointeur de tampon.

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

Cela a fonctionné parfaitement. Merci beaucoup pour votre réponse rapide. –