Swift 3和Xcode8 - 不明确地使用init

时间:2016-09-19 17:44:14

标签: ios swift xcode swift3 xcode8

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

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

显示错误

  

模糊地使用'init'

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

2 个答案:

答案 0 :(得分:8)

UnsafePointer包含UnsafePointerUnsafeMutablePointer的初始化程序,并且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