尝试使用swift与iOS AudioQueues接口,并在尝试传递定义我的状态的对象时遇到障碍。
我的状态对象是一个自定义结构,定义为:
struct UserData {
var active: Bool = false
var audioFileId: AudioFileID = nil
}
我的快速音频输入回调:
let myCallback : @convention(c) (UnsafeMutablePointer<Void>, AudioQueueRef, AudioQueueBufferRef, UnsafePointer<AudioTimeStamp>, UInt32, UnsafePointer<AudioStreamPacketDescription>) -> Void = {
(inUserData, inAQ, inBuffer, inStartTime, inNumberPacketDescriptions, inPacketDescs) -> Void in
...
}
最后,初始化音频队列:
AudioQueueNewInput(&audioStreamBasicDescription, myCallback, &userData, nil, nil, 0, &inputQueue)
我遇到的问题是如何将inUserData: UnsafeMutablePointer<Void>
转换为我的UserData结构
或者,当然,还有更好的处理方式。
谢谢!
答案 0 :(得分:2)
您可以使用
let userData: UserData = UnsafePointer(inUserData).memory
或
let userData = UnsafePointer<UserData>(inUserData).memory
两者都是等价的。另请参阅UnsafeMutablePointer Structure Reference。
要返回一些修改后的数据,您可以使用
let userDataReference = UnsafeMutablePointer<UserData>(inUserData)
var userData = userDataReference.memory
userData.… = … /* modifiy local copy */
userDataReference.memory = userData
您也可以直接修改userDataReference.memory
,但我会反对。