gpt4 book ai didi

swift - 如何在 Swift 中从 CMutablePointer 到 CGFloat[]

转载 作者:IT王子 更新时间:2023-10-29 05:30:37 24 4
gpt4 key购买 nike

我正在尝试转换使用 Facebook's pop library 的 ObjC 类 swift 。 Pop 使用了相当多的 C。

在 ObjC 中,我有一个看起来像这样的 block ......

prop.readBlock = ^(SHVGraphViewObjc *graphView, CGFloat values[]) {
values[0] = [graphView.centerOffsets[idx] doubleValue];
};

Swift 中等效的闭包定义是

prop.readBlock = {(graphView: AnyObject!, values: CMutablePointer<CGFloat>) in }

我想不通的是如何转换 values[0] = [graphView.centerOffsets[idx] doubleValue]; swift ?我如何让 Swift 知道 CMutablePointer<CGFloat>应该是 CGFloat[]

最佳答案

编辑:在从 online documentation (PDF) 中了解更多信息后,只想澄清一些事情.

Swift 中有一些常用的指针类型,下面是它们如何映射到 C 等价物:

作为参数的指针

CConstVoidPointer     => const void *
CMutableVoidPointer => void *
CConstPointer<Type> => const Type *
CMutablePointer<Type> => Type *

作为返回类型、变量和参数的指针*

COpaquePointer      => void *
UnsafePointer<Type> => Type *

注意:参数在超过一个指针级别深时遵循此规则,否则见上文。

类类型指针

CConstPointer<Type>              => Type * const *
CMutablePointer<Type> => Type * __strong *
AutoreleasingUnsafePointer<Type> => Type **

快捷指针

使用 CConstPointer<Type> 时Swift 中的指针,您可以传递以下任何一种:

  • nil ,这将被评估为 NULL指针
  • A CConstPointer<Type>值(value)
  • A CConstVoidPointer值(value)
  • A CMutablePointer<Type>值(value)
  • A CMutableVoidPointer
  • A AutoreleasingUnsafePointer<Type>将转换为 CConstPointer<Type> 的值如有必要
  • A Type通过地址传递的值(& 运算符)
  • A Type[]数组

注意: CConstVoidPointer也可以采用上述任何值。

使用 CMutablePointer<Type> 时Swift 中的指针,您可以传递以下任何一种:

  • nil ,这将被评估为 NULL指针
  • A CMutablePointer<Type>值(value)
  • A Type通过地址传递的值(& 运算符)
  • A Type[]按地址传递的数组(& 运算符)

注意: CMutableVoidPointer除了 CMUtableVoidPointer 之外,还可以采取以上任何一项值(value)观。

因此在您的情况下似乎是 CMutablePointer<CGFloat>也可以是指向 CGFloat 数组的指针值。虽然我不完全确定如何在 Swift 中取消引用它。 (也许是 as 运算符?)

关于swift - 如何在 Swift 中从 CMutablePointer<CGFloat> 到 CGFloat[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24051395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com