【问题标题】:Pass pointer to var in C function from Swift从 Swift 将指针传递给 C 函数中的 var
【发布时间】:2017-04-27 17:58:00
【问题描述】:

我在一个名为的文件中有一个 C 函数(缓冲区是一个 C 结构)

   BufferInit(Buffer *buffer, int32_t size)

当我转向 Swift 时,在我的 Swift 类中我声明了一个私有变量,例如

 var buffer:Buffer?

在初始化函数中我这样调用

  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)

【问题讨论】:

  • 您能否添加您遇到的错误的确切文本以及Buffer 结构的详细信息?
  • 我的猜测:buffer 应该被初始化而不是可选的。
  • 它应该被初始化为某个值,比如所有值 0?

标签: objective-c swift swift3


【解决方案1】:

你的 C 函数被导入到 Swift 中

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2011-05-22
    • 2019-03-12
    • 1970-01-01
    • 2012-02-22
    • 2010-10-02
    相关资源
    最近更新 更多