web-dev-qa-db-fra.com

Comment définir et obtenir la valeur du pointeur Swift

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))))
26
Giang

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:

  • vérifier si pointe vers une variable (non nulle)
  • Attribuez votre valeur à la propriété 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)
48
Kostiantyn Koval

Vous devez utiliser la propriété pointee au lieu de memory in Swift 3

pointer.pointee = value
33
Roman