假设我在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互操作性设计的学术问题。
答案 0 :(得分:3)
您正在寻找withUnsafeMutablePointer(_: _:)。它采用类型为T
的inout参数和采用类型UnsafeMutablePointer<T>
的参数的块。它被用作:
var i: Int = 0
withUnsafeMutablePointer(&i) { (pointer) in
f(pointer)
}