ネイティブのSwift配列を使用して、withUnsafeMutableBytes
メソッドを呼び出すと、配列の記憶域にUnsafeMutableRawBufferPointer
が得られます。 baseAddress
プロパティは、バッファのアドレスをUnsafeMutableRawPointer?
として取得します。ポインタはあなたがwithUnsafeMutableBytes
に渡すクロージャの内部でのみ有効であることを
import CoreGraphics
var pixelData: [UInt8] = [0, 0, 0, 0]
pixelData.withUnsafeMutableBytes { pointer in
guard let colorSpace = CGColorSpace(name: CGColorSpace.displayP3),
let context = CGContext(data: pointer.baseAddress,
width: 1,
height: 1,
bitsPerComponent: 8,
bytesPerRow: 4,
space: colorSpace,
bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)
else {
return
}
// Draw a white background
context.setFillColor(CGColor.white)
context.fill(CGRect(x: 0, y: 0, width: 1, height: 1))
}
print(pixelData) // prints [255, 255, 255, 255]
注:
は、ここでの例です。グラフィックスコンテキストは、このポインタがコンテキストの存続期間中有効であると仮定しているため、クロージャからコンテキストを戻し、外部からアクセスすることは未定義の動作になります。
withUnsafeMutableBytes
が返ってくると、pixelData
配列の内容が変更されています。
詳細については、[__Apple Docs__](https://developer.apple.com/documentation/swift/unsafemutablerawpointer)を参照してください。 – holex