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

DCD*_*CDC 9 xcode ios swift swift3 xcode8

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

let valueData:Data = Data(bytes: UnsafePointer<UInt8>(&intVal), count: sizeof(NSInteger))
Run Code Online (Sandbox Code Playgroud)

它显示错误

模糊地使用'init'

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

Jan*_*ans 8

UnsafePointer有两个UnsafePointer和的初始化程序UnsafeMutablePointer,并且sizeof被移动以MemoryLayout消除歧义:

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


Mar*_*n R 6

Data从简单值创建的最简单方法是通过 UnsafeBufferPointer,然后您不需要任何显式指针转换或大小计算:

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

有关从值到Data 和向后转换的更通用的方法,请参阅例如往返数据的往返Swift数字类型.