在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。 : - (
答案 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)