質問: try Data(contentsOf: dataURL) ``` で読み込んだのは良いのですが、この`data`から`UnsafePointer!`で、データー列の先頭アドレスを取得する一般的な方法はどの様になるのでしょうか? * `.withUnsafeBytes`で愚直にコピーする * `Data`ではなく`NSData.bytes`をキャストする が考えられますが、もっと素直に変換または取得出来るような気がするため、こうするといいよという方法がありましたらお教え下さい。
回答: なぜ`withUnsafeBytes`を使う方法が「愚直」と感じられるのか理解に苦しみますが、Swiftの`Data`から内部のデータへのポインターを取得する唯一保証された方法が、`withUnsafeBytes`を使うことです。ただし「コピー」が必要かどうかは、場合によるのでなんとも言えませんが。 `NSData.bytes`を使う方法は、現在の実装では「多分」動くでしょうが、Swift的には保証されたものではありません。実際`NSData.bytes`はObjective-C環境下でも最適化のレベル等によって動かないことがある(あった?)ことが報告されており、安全な方法とは言えません。 現在のSwiftの標準ライブラリは「確実に動作することを保証する範囲を狭めることにより、(将来の)最適化の余地を確保する」と言う方針で作られており、内部へのポインタが`withUnsafeBytes`のように引数のブロッックの範囲でしか有効にならない、というのもその一環です。標準ライブラリの設計思想を理解し、それに従ったコーディングをするというのが正しく聡明な方法でしょう。何をもって「素直」と言いたいのかわかりませんが、標準ライブラリの設計者が提供する機能を素直に利用するのが「もっとも素直な」方法でしょう。