如何设置&得到指针Swift的值

时间:2014-09-04 08:06:08

标签: ios objective-c xcode swift

当我想要设置/改变指针值时,在Objetive-C中。我用

*pointer = value

但是在Swift中,如何获取/设置指针的值?

我正在使用位图像素:

  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));
    }
  }

所以我想把这个代码转换成Swift,但是我被指针困住了。

23.03.2016 - 更新代码

var inputPixels:UnsafeMutablePointer<UInt32> = nil
inputPixels = UnsafeMutablePointer<UInt32>(calloc(inputHeight * inputWidth, UInt(sizeof(UInt32))))

2 个答案:

答案 0 :(得分:47)

你可以在Swift中使用指针。有UnsafePointerUnsafeMutablePointer个通用类型。

这是一个带float指针的函数 您可以使用float变量并传递它的地址&floatVar
或者您可以创建并分配UnsafeMutablePointer并传递它。但是你必须手动分配和释放内存。

当您使用UnsafeMutablePointer指针类型并希望为其指定一些值时,您必须执行以下操作:

  • 检查是否指向某个变量(不是零)
  • 将您的值分配给memory属性

代码示例:

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)

答案 1 :(得分:30)

你应该在Swift 3中使用 pointee 属性而不是内存

pointer.pointee = value