Swift定义c中定义的struct的双指针

时间:2014-06-06 01:58:44

标签: swift pointers struct

我有一个包含此功能的库:

void create_pointer(Pointer **pointer);

它需要指针的指针并为其分配内存。在c中,我可以这样做

Pointer *pointer;
create_pointer(&pointer);

然后我有一个指针的实例。

但是现在我想在Swift中使用这个功能。怎么样?

我没有关于Pointer的详细信息,我只知道它是一个结构,定义如下

typedef struct Pointer Pointer;

1 个答案:

答案 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包装器使任务变得更加容易。