Ios 快速铸造非女性指针<;无效>;在C中回调
尝试使用swift与iOS AudioQueues接口,并在试图传递定义我的状态的对象时遇到障碍 My state对象是一个自定义结构,定义为:Ios 快速铸造非女性指针<;无效>;在C中回调,ios,c,swift,casting,Ios,C,Swift,Casting,尝试使用swift与iOS AudioQueues接口,并在试图传递定义我的状态的对象时遇到障碍 My state对象是一个自定义结构,定义为: struct UserData { var active: Bool = false var audioFileId: AudioFileID = nil } 我的swift音频输入回调: let myCallback : @convention(c) (UnsafeMutablePointer<Void>, AudioQ
struct UserData {
var active: Bool = false
var audioFileId: AudioFileID = nil
}
我的swift音频输入回调:
let myCallback : @convention(c) (UnsafeMutablePointer<Void>, AudioQueueRef, AudioQueueBufferRef, UnsafePointer<AudioTimeStamp>, UInt32, UnsafePointer<AudioStreamPacketDescription>) -> Void = {
(inUserData, inAQ, inBuffer, inStartTime, inNumberPacketDescriptions, inPacketDescs) -> Void in
...
}
我陷入困境的是如何将inUserData:UnsafemeutablePointer
强制转换到我的UserData结构
当然,还有更好的处理方法
谢谢 您可以使用
let userData: UserData = UnsafePointer(inUserData).memory
或
let userData=UnsafePointer(inUserData)。内存
两者是等价的。另见
要返回一些修改后的数据,可以使用
let userDataReference = UnsafeMutablePointer<UserData>(inUserData)
var userData = userDataReference.memory
userData.… = … /* modifiy local copy */
userDataReference.memory = userData
let userDataReference=UnsafeMutablePointer(inUserData)
var userData=userDataReference.memory
userData….=../*修改本地副本*/
userDataReference.memory=userData
您也可以直接修改
userDataReference.memory
,但我建议您不要这样做。很抱歉添加一个。是否可以在回调中修改结构的属性?给定一个附加属性var packetsProcessed:Int64=0,并且能够在回调中设置它
let userData = UnsafePointer<UserData>(inUserData).memory
let userDataReference = UnsafeMutablePointer<UserData>(inUserData)
var userData = userDataReference.memory
userData.… = … /* modifiy local copy */
userDataReference.memory = userData