对Swift不熟悉(并且在Swift的指针处理方面存在一些问题)我无法正确解析Xcode给我的错误。有关获取变量引用的任何提示吗?
RGBA
是一个只是结构的4 UInt8
s
var data: UnsafeMutablePointer<RGBA> = UnsafeMutablePointer<RGBA>(CGBitmapContextGetData(bitmapContext))
var pixel = &data[offset] // [1] this is the trouble statement
// use the pixel struct to read *and* write
[1]错误
为什么我能够使用下标运算符(data[offset].r = 0
)访问内存,但在设置元素引用(memory
)后我使用了var pixel = data[offset]
属性?当然必须有一个Swift方式来存储本地的引用吗?
我也可以通过inout
参数函数完成相同的操作,即;
func setPixel(inout pixel: RGBA, var r: UInt8, var g: UInt8, var b: UInt8, var a: UInt8) {
pixel.r = r // I can use pixel directly without '.memory'
}
答案 0 :(得分:0)
您可以简单地向指针添加偏移量:
let data = UnsafeMutablePointer<RGBA>(CGBitmapContextGetData(bitmapContext))
let pixel = data + offset
然后你可以读/写pixel
指向的内存:
let red = pixel.memory.red
pixel.memory.blue = 123
答案 1 :(得分:0)
在做了一些研究(包括与#swift人员交谈)之后,似乎Swift故意禁止这种变量引用(引用数组元素)。
一种解决方案是使用函数来定义引用范围:
func setElem(inout elem: T, var value: T {
elem = value
}
// can then be used like (which works for address-of array element):
self.setElem(&data[index], elemValue)