0
多くのC/Obj-C APIはvoidへのポインタを扱います。これらの型は通常、UnsafeMutablePointerまたはUnsafePointer(const void *の場合)として表されます。これらの値を[Float]や[UInt8]のようなパックされたデータ配列に再解析する典型的な方法は何ですか?UnsafeMutablePointer <Void>を空ではないタイプの配列に型変換するための慣用句?
多くのC/Obj-C APIはvoidへのポインタを扱います。これらの型は通常、UnsafeMutablePointerまたはUnsafePointer(const void *の場合)として表されます。これらの値を[Float]や[UInt8]のようなパックされたデータ配列に再解析する典型的な方法は何ですか?UnsafeMutablePointer <Void>を空ではないタイプの配列に型変換するための慣用句?
最も簡単な方法は、UInt8
ポインタにキャストすることです:
let buffer = UnsafeMutablePointer<UInt8>(MTLBuffer.contents())
そして、あなたは添字演算子を使用してアクセスすることができます
for index in 0 ..< bufferSize {
let foo = buffer[index] // foo is `UInt8` type
...
buffer[index] = bar
}
あなたは、ユースケースを追加することもでき、質問があまりにもありますジェネリック。例えば。なぜそれらを配列に変換したいのですか? – hnh
具体的なシナリオは、UnsafePointerを返すMTLBuffer.contents()の使用です。なぜなら、データはAPIに関するビットの単なるバッグなのでです。呼び出しコードは正しい解釈を知っていますが、それに応じて型を再解釈する必要があります。 –
Fooberman