我有一个包含此功能的库:
void create_pointer(Pointer **pointer);
它需要指针的指针并为其分配内存。在c中,我可以这样做
Pointer *pointer;
create_pointer(&pointer);
然后我有一个指针的实例。
但是现在我想在Swift中使用这个功能。怎么样?
我没有关于Pointer的详细信息,我只知道它是一个结构,定义如下
typedef struct Pointer Pointer;
答案 0 :(得分:5)
让我们从C示例开始
typedef struct {
NSUInteger someNumber;
} SomeStruct;
void create_some_struct(SomeStruct **someStruct) {
*someStruct = malloc(sizeof(SomeStruct));
(*someStruct)->someNumber = 20;
}
在C中,你会像这样使用它:
//pointer to our struct, initially empty
SomeStruct *s = NULL;
//calling the function
create_some_struct(&s);
在斯威夫特:
//declaring a pointer is simple
var s: UnsafePointer<SomeStruct> = UnsafePointer<SomeStruct>.null()
//well, this seems to be almost the same thing :)
create_some_struct(&s)
println("Number: \(s.memory.someNumber)"); //prints 20
修改
如果您的指针是不透明类型(例如void *
),则必须使用
var pointer: COpaquePointer = COpaquePointer.null()
请注意,Swift并非旨在轻松地与C代码交互。 C代码大多不安全,Swift是为安全而设计的,这就是为什么Swift代码编写起来有点复杂的原因。 C库的Obj-C包装器使任务变得更加容易。