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 。
UnsafePointer
对UnsafePointer
和UnsafePointer
都有初始值UnsafePointer
UnsafeMutablePointer
,sizeof被移动到MemoryLayout
,将其MemoryLayout
为:
let valueData = withUnsafePointer(to: &intVal){ return Data(bytes: $0, count: MemoryLayout<NSInteger>.size) }