Xcode8とSwift3にしたらAmbiguous use of 'init'というエラーが出た


1. 概要

iOSアプリでBLEを使ってKonashiを動かしています。Swiftはほぼ初心者です。
先日Xcode8にアップデートしたところ、既存のプログラムもSwift3に自動修正してくれましたが、Ambiguous use of initというエラーが出てコンパイルできなかったので、対応をメモしておきます。
あまりネットに情報がなかったので、詳しい人にとっては当たり前のことかもしれません。

2. 参考サイト

Swiftが分かっていないのでエラーを検索するしかなかったのですが、以下の2つが役に立ちました。
1つ目のサイトは自分と同じエラーが出ている日本語のページだったのですが、書いてあった解決策が理解できず、そこに書いてあったStack OverflowのURL(2つ目)をたどっていきました。

3. 作業環境

  • MacBook Air (13-inch, Mid 2012) & macOS Sierra 10.12
  • Xcode8
  • iPhone6 plus + iOS 10.0.2

4. エラー箇所と変更内容

エラー箇所は以下の行で、エラー内容は「Ambiguous use of 'init'」でした。

let data: Data = Data(bytes: UnsafePointer<UInt8>(&value), count: 1)

参考サイト2には

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

のような解決策が書いてあったので、これに沿ってエラー箇所を以下のように書き換えました。

//    let data: Data = Data(bytes: UnsafePointer<UInt8>(&value), count: 1)
    let data = Data(buffer: UnsafeBufferPointer(start: &value, count: 1))

これでエラーはなくなって無事コンパイルできました。