从 Swift 将指针传递给 C 函数中的 var
2017-04-27
1411
我在一个名为 (Buffer 是 C 结构) 的文件中有一个 C 函数
BufferInit(Buffer *buffer, int32_t size)
当我转到 Swift 时,在我的 Swift 类中我声明了一个私有变量,如
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个回答
您的 C 函数被导入到 Swift 中作为
func BufferInit(_ buffer: UnsafeMutablePointer<Buffer>!, _ size: Int32)
并且您必须将
Buffer
类型的(已初始化、非可选)变量的地址作为 inout 表达式传递。
从 C 导入的结构在 Swift 中有一个默认构造函数,它将所有成员初始化为零,因此您可以编写
var buffer = Buffer()
BufferInit(&buffer, 32)
Martin R
2017-04-27