从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]
值,作为指向数组开头的指针传递,并在调用期间延长寿命