如何将本地swift变量的地址分配给UnsafeMutablePointer

时间:2016-03-30 19:48:21

标签: swift

假设我在Swift中有一个变量,如

var i: CInt = 123;

如何让UnsafeMutablePointer<CInt>指向i的地址?

我知道我可以通过调用

将此变量的地址传递给C函数void f(int *i)
f(&i);

我也知道C指针可以用swift表示为UnsafeMutablePointer。所以问题是我如何将i的地址分配给这样的UnsafeMutablePointer。我本以期待像

这样的东西
var p: UnsafeMutablePointer<CInt> = &i;

var p = UnsafeMutablePointer<CInt>(&i);

应该有效,但事实并非如此。我想我可以编写一个提供以下功能的C库

int *noop(int *p){ return p;}

可以在Swift中使用

var p = noop(&i);

但我没有尝试过,它不是正确的解决方案。必须有一些更简单的东西。

请不要问我为什么要这样做。它更像是一个理解Swift和C互操作性设计的学术问题。

1 个答案:

答案 0 :(得分:3)

您正在寻找withUnsafeMutablePointer(_: _:)。它采用类型为T的inout参数和采用类型UnsafeMutablePointer<T>的参数的块。它被用作:

var i: Int = 0
withUnsafeMutablePointer(&i) { (pointer) in
    f(pointer)
}