在我安装Xcode 8并将项目转换为Swift 3之前,以下行很好。现在转换后它看起来像这样:
let valueData:Data = Data(bytes: UnsafePointer<UInt8>(&intVal), count: sizeof(NSInteger))
显示错误
模糊地使用'init'
Swift 3中有什么问题?如何解决?
答案 0 :(得分:8)
UnsafePointer
包含UnsafePointer
和UnsafeMutablePointer
的初始化程序,并且sizeof已移至MemoryLayout
,因此将其消除歧义:
let valueData = withUnsafePointer(to: &intVal){
return Data(bytes: $0, count: MemoryLayout<NSInteger>.size)
}
答案 1 :(得分:6)
从简单值创建Data
的最简单方法是通过
UnsafeBufferPointer
,那么您不需要任何显式指针转换或大小计算:
var intVal = 1000
let data = Data(buffer: UnsafeBufferPointer(start: &intVal, count: 1))
print(data as NSData) // <e8030000 00000000>
有关从值转换为Data
的更通用的方法
然后再看,例如round trip Swift number types to/from Data。