web-dev-qa-db-ja.com

Swift 3およびXcode-initのあいまいな使用

Xcode 8をインストールし、プロジェクトをSwift 3に変換する前は、次の行で問題ありませんでした。変換後は、次のようになります。

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

エラーが表示されます

'init'のあいまいな使用

Swift 3?修正方法は?

9
theDC

単純な値から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

6
Martin R

UnsafePointerにはUnsafePointerUnsafeMutablePointerの両方の初期化子があり、sizeofはMemoryLayoutに移動されました。

let valueData = withUnsafePointer(to: &intVal){
    return Data(bytes: $0, count: MemoryLayout<NSInteger>.size)
}
8
Jans