从mach_timebase_info()创建结构

在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。 🙁

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

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

mach_timebase_info函数声明为

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

这意味着您可以使用&传递(初始化的) mach_timebase_info变量作为“in-out表达式”:

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

有关更多信息,请参阅“使用Swift with Cocoa和Objective-C”手册中的与C API交互 :

可变指针

当函数声明为接受UnsafeMutablePointer参数时,它可以接受以下任何一项:

  • nil ,作为空指针传递
  • UnsafeMutablePointer
  • 一个输入输出表达式,其操作数是类型为Type的存储左值,它作为左值的地址传递
  • 输入输出[Type]值,作为指向数组开头的指针传递,并在调用期间延长寿命