ios - color - Cómo establecer y obtener el valor del puntero Swift
uinavigationitem title color (2)
En Objetive-C cuando quiero establecer / cambiar el valor del puntero. yo suelo
*pointer = value
Pero en Swift, ¿cómo obtener / establecer el valor del puntero?
Estoy trabajando con píxeles de mapa de bits:
NSUInteger offsetPixelCountForInput = ghostOrigin.y * inputWidth + ghostOrigin.x;
for (NSUInteger j = 0; j < ghostSize.height; j++) {
for (NSUInteger i = 0; i < ghostSize.width; i++) {
UInt32 * inputPixel = inputPixels + j * inputWidth + i + offsetPixelCountForInput;
UInt32 inputColor = *inputPixel;
newR = MAX(0,MIN(255, newR));
newG = MAX(0,MIN(255, newG));
newB = MAX(0,MIN(255, newB));
*inputPixel = RGBAMake(newR, newG, newB, A(inputColor));
}
}
Así que quiero convertir este código en Swift, pero estoy atascado con punteros.
23.03.2016 - Actualizar código
var inputPixels:UnsafeMutablePointer<UInt32> = nil
inputPixels = UnsafeMutablePointer<UInt32>(calloc(inputHeight * inputWidth, UInt(sizeof(UInt32))))
Deberías usar la propiedad pointee en lugar de la memoria en Swift 3
pointer.pointee = value
Puedes trabajar con punteros en Swift. Hay tipos genéricos UnsafePointer
y UnsafeMutablePointer
.
Aquí hay una función que toma un puntero float
Puedes usar la variable float y pasar su dirección &floatVar
o puede crear y asignar un UnsafeMutablePointer
y pasarlo. Pero tienes que asignar y desasignar manualmente la memoria.
Cuando trabajas con un tipo de puntero UnsafeMutablePointer
y quieres asignarle algún valor, debes hacer lo siguiente:
- verifica si apunta a alguna variable (no nula)
- Asigne su valor a la propiedad de
memory
Ejemplo de código:
func work (p: UnsafeMutablePointer<Float>) {
if p != nil {
p.memory = 10
}
println(p)
println(p.memory)
}
var f: Float = 0.0
var fPointer: UnsafeMutablePointer<Float> = UnsafeMutablePointer.alloc(1)
work(&f)
work(fPointer)
fPointer.dealloc(1)