我在名称文件中有一个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)
答案 0 :(得分:1)
您的C函数将作为
导入Swiftfunc BufferInit(_ buffer: UnsafeMutablePointer<Buffer>!, _ size: Int32)
你必须传递一个(初始化的,非可选的)的地址
类型Buffer
的变量作为inout表达式。
从C导入的结构在Swift中有一个默认的构造函数
将所有成员初始化为零,因此您可以编写
var buffer = Buffer()
BufferInit(&buffer, 32)