2014-10-27 65 views
1

创建一个在C时基信息结构是容易的,但是在斯威夫特以下在操场上不起作用一个结构:创建从mach_timebase_info()

let timebaseInfo: mach_timebase_info_data_t = mach_timebase_info(&timebaseInfo)

的错误是Variable used within its own initial value

我明白这个错误,但是我无法想到一种不下降到C的方法。有没有一种我错过的Swift方法?任何帮助将不胜感激。 :-)

编辑:其实我看到上面的“A”问题,“=”没有意义。但是,我也尝试下面还有:

let timebaseInfo: mach_timebase_info_data_t 
mach_timebase_info(&timebaseInfo)' 

有了一个错误,说明timebasedInfo初始化之前使用。 :-(

回答

3

你需要使用UnsafeMutablePointer<Type>,如下:

let p = UnsafeMutablePointer<mach_timebase_info_data_t>.alloc(1) 
mach_timebase_info(&p.memory) 
+0

是的,这也适用,但不要忘记在不再需要时释放内存。 – 2014-10-27 16:41:33

+1

...你可以简化第二行到'mach_timebase_info(p)'。 – 2014-10-27 17:46:18

4

mach_timebase_info函数被声明为

typealias mach_timebase_info_t = UnsafeMutablePointer<mach_timebase_info> 
// ... 
func mach_timebase_info(info: mach_timebase_info_t) -> kern_return_t 

这意味着可以通过一个(初始化)mach_timebase_info可变 作为一个 “在出表达” 与&

var timebaseInfo = mach_timebase_info(numer: 0, denom: 0) 
let status = mach_timebase_info(&timebaseInfo) 
if status == KERN_SUCCESS { 
    // ... 
} 

欲了解更多信息,请参阅Interacting with C APIs“使用Swift with Cocoa和Objective-C”手册:

易变指针

当一个函数被声明为接受一个UnsafeMutablePointer<Type> 参数,它可以接受任何的以下内容:

  • nil,其作为一个空指针
  • 的传递UnsafeMutablePointer<Type>
  • 一个输入表达式,其操作数是Type,类型的存储的左值,其作为左值
  • 一种在出[Type]值,其作为一个指针的 开始时的数组传递的地址通过,和寿命延长的对呼叫的持续时间
+0

谢谢两位非常多的伟大的答案! – 2014-10-27 16:21:23