从Swift传递指向C函数中的var的指针

时间:2017-04-27 17:58:01

标签: objective-c swift swift3

我在名称文件中有一个C函数(Buffer是一个C结构)

   BufferInit(Buffer *buffer, int32_t size)

当我转向Swift时,在我的Swift类中,我声明了一个像

这样的私有var
 var buffer:Buffer?

在init函数中我像这样调用

  BufferInit(&buffer, 32)

但是我得到了编译错误,在Swift中实现相同的正确方法是什么?我从Objective-C调用相同的BufferInit没有问题,但Swift很乱。

编辑:以下是详细信息,

       typedef struct {
         void             *buffer;
         int32_t           length;
         int32_t           tail;
         int32_t           head;
        } Buffer;

错误是编译器要求我打开缓冲区并更正代码(我认为不正确):

       BufferInit(&buffer!, 32)

1 个答案:

答案 0 :(得分:1)

您的C函数将作为

导入Swift
func BufferInit(_ buffer: UnsafeMutablePointer<Buffer>!, _ size: Int32)

你必须传递一个(初始化的,非可选的)的地址 类型Buffer的变量作为inout表达式。 从C导入的结构在Swift中有一个默认的构造函数 将所有成员初始化为零,因此您可以编写

var buffer = Buffer()
BufferInit(&buffer, 32)