Xcode 8をインストールし、プロジェクトをSwift 3に変換する前は、次の行で問題ありませんでした。変換後は、次のようになります。
let valueData:Data = Data(bytes: UnsafePointer<UInt8>(&intVal), count: sizeof(NSInteger))
エラーが表示されます
'init'のあいまいな使用
Swift 3?修正方法は?
単純な値から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 。
UnsafePointer
にはUnsafePointer
とUnsafeMutablePointer
の両方の初期化子があり、sizeofはMemoryLayout
に移動されました。
let valueData = withUnsafePointer(to: &intVal){
return Data(bytes: $0, count: MemoryLayout<NSInteger>.size)
}