开发者问题收集

从 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