2016-12-03 3 views
0

Я получаю ошибку ниже для этого утверждения:Как обновить инструкцию Data UnsafePointer для Swift 3?

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

Это сработало отлично. Большое вам спасибо за ваш быстрый ответ. –

Смежные вопросы