2014-09-04 61 views
20

在Objetive-C中,当我想要设置/更改指针的值时。我使用如何设置和获取指针的值Swift

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

所以我想这个代码转换成斯威夫特,但我坚持使用指针。

2016年3月23日 - 更新代码

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

在swift中没有指针。 – Kevin 2014-09-04 08:14:31

+2

你想完成什么?也许可能有另一种方式 - 提供更多细节。 – 2014-09-04 08:17:09

+0

我编辑了我的帖子,请仔细阅读,感谢您访问 – Giang 2014-09-04 08:21:26

回答

44

您可以在斯威夫特指针工作。有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) 
+0

好的,非常感谢你! – Giang 2014-09-04 09:56:54

+1

但请记住,您可能不希望这样做,具体取决于*为什么*您想要一个指针。在你的例子中,它看起来像你正在使用指针运算来将索引从二维坐标计算为一维数组。在Swift中(和Objective C一样),你可以计算你需要的数组索引(例如,'index = j * inputWidth + i + offsetPixelCountForInput')并使用方括号语法来访问该值,例如, 'inputPixels [指数]'。我们需要查看其他代码(例如inputPixels的声明)以提供最佳建议。 – 2014-09-04 10:17:13

+0

@MattGibson:我已经解决了指针问题,谢谢 – Giang 2014-09-07 02:02:46

22

你应该在斯威夫特3使用指针对象属性,而不是内存

pointer.pointee = value 
+0

数组怎么样? – 2017-11-14 16:41:10

0

“如何设置 & 得到指针斯威夫特的价值?”为什么不仅仅使用getter和setter来做到这一点!例如:

var myPet = "cat" 

func takePetOnWalkNextToNuclearPowerPlant() { 

    var newPet : String { 
     get { 
      return myPet 
     } 
     set (value) { 
      myPet = value 
     } 
    } 

    newPet = "dog" 
} 

takePetOnWalkNextToNuclearPowerPlant() 

print(myPet) // Prints "dog" 

此外,没有必要手动从内存中释放指针对象,它是为你完成的。