Swift 3和Xcode8 – 对init的模糊使用

在我安装Xcode 8并将项目转换为Swift 3之前,下面的代码行很好。 现在转换后看起来像这样:

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

它显示错误

模糊使用'init'

它在Swift 3中有什么问题? 如何解决它?

从简单的值创buildData最简单的方法是通过UnsafeBufferPointer ,然后你不需要任何明确的指针转换或大小计算:

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

有关从数值转换为Data的更通用的方法,请参阅Data 往返Swift数字types 。

UnsafePointerUnsafePointerUnsafePointer都有初始值UnsafePointer UnsafeMutablePointer ,sizeof被移动到MemoryLayout ,将其MemoryLayout为:

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