首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问Swift 5中的C双指针数组(**条目)

访问Swift 5中的C双指针数组(**条目)
EN

Stack Overflow用户
提问于 2020-07-01 20:40:30
回答 1查看 105关注 0票数 1

我正在尝试创建一个围绕C库(libexif)的包装器,这样我就可以在Swift中使用它来从图像中读取元数据。

我对C和Swift非常陌生,但我已经设法掌握了一些方法,但是有一个问题难倒了我。

libexif中的一个structs有一个名为**entries的元素,它的类型为ExifEntry (参见here)。

我认为这是一种在C中用指针来描述数组的方法。

然而,在Swift中,这被推断为UnsafeMutablePointer<UnsafeMutablePointer<ExifEntry>?>!类型,表示只有一个元素。

我找到了一些关于如何将Swift ([String])中的数组转换为C中的**array的示例,但没有其他方法,我似乎无法真正理解如何解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-04 15:46:29

事实证明,这很容易。

我的函数是这样结束的:

代码语言:javascript
复制
  func entries(rawEntries: UnsafeMutablePointer<UnsafeMutablePointer<ExifEntry>?>, count Int) -> [UnsafeMutablePointer<ExifEntry>?] {
    if let rawEntries = self.entries {
      let entries = Array(
        UnsafeBufferPointer(
          start: rawEntries,
          count: count
        )
      )

      return entries
    }

    return []
  }
}

其中关键是使用UnsafeBufferPointer,它本质上是获取C数组的起始指针和对象的数量。

在我的例子中,libexif中的底层结构包含指向条目的指针,也包含计数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62677095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档