如何从CMutablePointer <CGFloat>转到Swift中的CGFloat []

Ros*_*mes 11 swift

我正在尝试将使用Facebook的pop库的ObjC类转换为Swift.Pop使用相当多的C.

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

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

Swift中的等效闭包定义是

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

我无法弄清楚如何将其转换values[0] = [graphView.centerOffsets[idx] doubleValue];为Swift?我怎么让Swift知道CMutablePointer<CGFloat>应该是一个CGFloat[]

Eri*_*rik 9

编辑:只是想从在线文档(PDF)中学到更多东西后澄清一些事情.

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

指针作为参数

CConstVoidPointer     => const void *
CMutableVoidPointer   => void *
CConstPointer<Type>   => const Type * 
CMutablePointer<Type> => Type *
Run Code Online (Sandbox Code Playgroud)

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

COpaquePointer      => void *
UnsafePointer<Type> => Type *
Run Code Online (Sandbox Code Playgroud)

注意:参数只有在深度超过一个指针级别时才遵循此规则,否则请参见上文.

类类型的指针

CConstPointer<Type>              => Type * const *
CMutablePointer<Type>            => Type * __strong *
AutoreleasingUnsafePointer<Type> => Type **
Run Code Online (Sandbox Code Playgroud)

Swift指针

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

  • nil,将被评估为NULL指针
  • 一个CConstPointer<Type>价值
  • 一个CConstVoidPointer价值
  • 一个CMutablePointer<Type>价值
  • 一个 CMutableVoidPointer
  • AutoreleasingUnsafePointer<Type>这将被转换为值CConstPointer<Type>,如果必要的
  • Type由地址传递的值(&操作者)
  • 一个Type[]数组

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

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

  • nil,将被评估为NULL指针
  • 一个CMutablePointer<Type>价值
  • Type由地址传递的值(&操作者)
  • Type[]由地址传递阵列(&操作者)

注意:CMutableVoidPointer除了CMUtableVoidPointer值之外,还可以采用上述任何一种方法.

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