微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

void create_pointer(Pointer **pointer);

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

Pointer *pointer;
create_pointer(&pointer);

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

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

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

typedef struct Pointer Pointer;

解决方法

让我们从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);

在Swift中:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐