Dans Objetive-C lorsque je veux définir/modifier la valeur du pointeur. j'utilise
*pointer = value
Mais dans Swift, comment obtenir/définir la valeur du pointeur?
Je me réveille avec un bitmap pixel:
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));
}
}
Je veux donc convertir ce code en Swift, mais je suis coincé avec des pointeurs.
23.03.2016 - Code de mise à jour
var inputPixels:UnsafeMutablePointer<UInt32> = nil
inputPixels = UnsafeMutablePointer<UInt32>(calloc(inputHeight * inputWidth, UInt(sizeof(UInt32))))
Vous pouvez travailler avec des pointeurs dans Swift. Il existe des types génériques UnsafePointer
et UnsafeMutablePointer
.
Voici une fonction qui prend un pointeur float
Vous pouvez utiliser une variable flottante et transmettre son adresse &floatVar
ou vous pouvez créer et allouer un UnsafeMutablePointer
et le transmettre. Mais vous devez allouer et désallouer manuellement la mémoire.
Lorsque vous travaillez avec un type de pointeur UnsafeMutablePointer
et que vous souhaitez lui attribuer une valeur, vous devez procéder comme suit:
memory
Exemple de code:
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)
Vous devez utiliser la propriété pointee au lieu de memory in Swift 3
pointer.pointee = value