我正在尝试将使用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[]?
编辑:只是想从在线文档(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)
CConstPointer<Type>在Swift中使用指针时,您可以传递以下任何一个:
nil,将被评估为NULL指针CConstPointer<Type>价值CConstVoidPointer价值CMutablePointer<Type>价值CMutableVoidPointerAutoreleasingUnsafePointer<Type>这将被转换为值CConstPointer<Type>,如果必要的Type由地址传递的值(&操作者)Type[]数组注意:CConstVoidPointer也可以采用上述任何值.
CMutablePointer<Type>在Swift中使用指针时,您可以传递以下任何一个:
nil,将被评估为NULL指针CMutablePointer<Type>价值Type由地址传递的值(&操作者)Type[]由地址传递阵列(&操作者)注意:CMutableVoidPointer除了CMUtableVoidPointer值之外,还可以采用上述任何一种方法.
因此,在您的情况下,a CMutablePointer<CGFloat>似乎也可以是指向CGFloat值数组的指针.虽然我不完全确定如何在Swift中取消引用.(也许是as运营商?)
| 归档时间: |
|
| 查看次数: |
3211 次 |
| 最近记录: |