データをUnsafePointer <UInt8>に変換する方法は?

Aug 25 2020

Swiftdataでは、型のデータバッファー(named )を、型のポインターを受け取るDataC関数(named do_something)に渡したいと思いますUnsafePointer<UInt8>

以下のコード例は正しいですか?もしそうなら、この場合、assumingMemoryBound(to:)代わりに使用しても大丈夫bindMemory(to:capacity:)ですか?

data.withUnsafeBytes { (unsafeBytes) in
  let bytes = unsafeBytes.baseAddress!.assumingMemoryBound(to: UInt8.self)
  do_something(bytes, unsafeBytes.count)
}

回答

2 MartinR Aug 25 2020 at 02:21

正しい方法は次を使用することbindMemory()です:

data.withUnsafeBytes { (unsafeBytes) in
    let bytes = unsafeBytes.bindMemory(to: UInt8.self).baseAddress!
    do_something(bytes, unsafeBytes.count)
}

assumingMemoryBound() メモリがすでに指定されたタイプにバインドされている場合にのみ使用する必要があります。

このトピックに関するいくつかのリソース:

  • UnsafeRawPointer移行ガイド
  • UnsafeRawPointer API