- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试转换使用 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
指针CConstPointer<Type>
值(value)CConstVoidPointer
值(value)CMutablePointer<Type>
值(value)CMutableVoidPointer
AutoreleasingUnsafePointer<Type>
将转换为 CConstPointer<Type>
的值如有必要Type
通过地址传递的值(&
运算符)Type[]
数组注意: CConstVoidPointer
也可以采用上述任何值。
使用 CMutablePointer<Type>
时Swift 中的指针,您可以传递以下任何一种:
nil
,这将被评估为 NULL
指针CMutablePointer<Type>
值(value)Type
通过地址传递的值(&
运算符)Type[]
按地址传递的数组(&
运算符)注意: CMutableVoidPointer
除了 CMUtableVoidPointer
之外,还可以采取以上任何一项值(value)观。
因此在您的情况下似乎是 CMutablePointer<CGFloat>
也可以是指向 CGFloat
数组的指针值。虽然我不完全确定如何在 Swift 中取消引用它。 (也许是 as
运算符?)
关于swift - 如何在 Swift 中从 CMutablePointer<CGFloat> 到 CGFloat[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24051395/
谁能解释一下如何访问CMutablePointer下面介绍?我找不到它的语法。以前是->在 Objective-C ,但这里我的解决方案均无效。 this link 中介绍的解决方案以相反的方式工作,
我正在尝试使用一些 C 基础 API,例如 Swift 语言中的 Launch Services,但我面临着对如何正确使用 CMutablePointer 的一些误解。我有以下代码: var item
如何在 Swift 中使用 C 级工厂方法? 让我们尝试使用诸如 NewMusicSequence() 之类的工厂。 var status:OSStatus var sequence:MusicSeq
我试图在 Swift 中调用 NSLayoutManager 对象的 lineFragmentRectForGlyphAtIndex 方法。它的描述是: func lineFragmentRectFo
我正在尝试使用 SCNGeometrySource 的 init(vertices: CMutablePointer, count: Int)初始化程序,但我不知道如何制作 CMutablePoint
我已经为一些旧的 C 源代码导入并创建了一个桥接头文件到 Swift。函数签名如下所示: struct Message prattle_parse_message(char *line); 它的快速声
我有一个库,其功能如下: int get_user_name(const char **buffer); 在 swift 中,应该这样调用: var name:CMutablePointer = ni
我试图在 MKMapView 上的 2 个坐标之间画线,我有一个数组来保留所有 poi,所以我有这段代码 var pointArr: CMutablePointer = nil 我的问题是如何给 po
Xcode Beta3 中的 CMutablePointer 和 CConstPointer 发生了什么? 在 Beta2 中成功编译的代码因错误而失败: Use of undeclared type
我正在尝试转换使用 Facebook's pop library 的 ObjC 类 swift 。 Pop 使用了相当多的 C。 在 ObjC 中,我有一个看起来像这样的 block ...... p
基本上我在 Swift 中使用 AssetsLibrary 框架,我怎么能将停止指针的值修改为 NO/False/0(我什至不知道它应该除外什么值)? self.library.enumerateGr
如果我将 float 组分配给 CMutablePointer在如下的 Swift Playground 中,我遇到了运行时崩溃: var floatArray:Float[] = Array(cou
在 Swift 中我如何转换 CFStringRef[]和 CFTypeRef[]至 CMutablePointer ? 我想调用CFDictionaryCreate来自 swift 。我已经定义:
我是一名优秀的程序员,十分优秀!