Swift 3 y Xcode8: uso ambiguo de init

Antes de instalar Xcode 8 y el proyecto convertido a Swift 3, la siguiente línea estaba bien. Ahora, después de la conversión, se ve así:

let valueData:Data = Data(bytes: UnsafePointer<UInt8>(&intVal), count: sizeof(NSInteger)) 

muestra el error

El uso ambiguo de 'init'

¿Qué hay de malo en Swift 3? ¿Como arreglarlo?

La forma más fácil de crear Data partir de un valor simple es ir a través de UnsafeBufferPointer , entonces no necesita ningún cálculo de tamaño o conversión de puntero explícita:

 var intVal = 1000 let data = Data(buffer: UnsafeBufferPointer(start: &intVal, count: 1)) print(data as NSData) // <e8030000 00000000> 

Para un enfoque más genérico para la conversión de valores a Data y viceversa, vea, por ejemplo, los types de número Swift de ida y vuelta a / de datos .

UnsafePointer tiene inicializador tanto para UnsafePointer como UnsafeMutablePointer , y sizeof se movió a MemoryLayout para desambiguarlo como:

 let valueData = withUnsafePointer(to: &intVal){ return Data(bytes: $0, count: MemoryLayout<NSInteger>.size) }