从mach_timebase_info()创建结构

时间:2014-10-27 15:35:30

标签: c swift

在C中创建时基信息结构很容易,但在Swift中,以下内容在操场中不起作用:

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。 : - (

2 个答案:

答案 0 :(得分:5)

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变量 作为一个&#34; in-out表达&#34;与&

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

有关详细信息,请参阅&#34;使用Swift with Cocoa和Objective-C&#34;中的Interacting with C APIs;手册:

  

可变指针

     

当一个函数声明为UnsafeMutablePointer<Type>时   参数,它可以接受以下任何一种:

     
      
  • nil,作为空指针传递
  •   
  • UnsafeMutablePointer<Type>
  •   
  • 一个输入输出表达式,其操作数是Type类型的存储左值,   它作为左值的地址传递
  •   
  • 一个输入输出[Type]值,作为指向开头的指针传递   数组,以及在通话期间延长的生命周期
  •   

答案 1 :(得分:3)

您需要使用UnsafeMutablePointer<Type>,如下所示:

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