有没有一种方法可以将Swift结构的地址转换为无效的UnsafeMutablePointer? 我尝试了一下但没有成功:
struct TheStruct { var a:Int = 0 } var myStruct = TheStruct() var address = UnsafeMutablePointer<Void>(&myStruct)
谢谢!
编辑: 我实际上正在尝试 将上下文 移植到Swift中 学习CoreAudio 的第一个示例。 这是我到目前为止所做的:
func myAQInputCallback(inUserData:UnsafeMutablePointer<Void>, inQueue:AudioQueueRef, inBuffer:AudioQueueBufferRef, inStartTime:UnsafePointer<AudioTimeStamp>, inNumPackets:UInt32, inPacketDesc:UnsafePointer<AudioStreamPacketDescription>) { } struct MyRecorder { var recordFile: AudioFileID = AudioFileID() var recordPacket: Int64 = 0 var running: Boolean = 0 } var queue:AudioQueueRef = AudioQueueRef() AudioQueueNewInput(&asbd, myAQInputCallback, &recorder, // <- this is where I *think* a void pointer is demanded nil, nil, UInt32(0), &queue)
我正在努力留在Swift中,但是如果事实证明这是一个问题而不是优势,那么我最终将链接到C函数。
编辑:底线 如果您因为试图在Swift中使用CoreAudio的AudioQueue而遇到这个问题,请不要这样做。(请阅读评论以获取详细信息)
据我所知,最短的方法是:
var myStruct = TheStruct() var address = withUnsafeMutablePointer(&myStruct) {UnsafeMutablePointer<Void>($0)}
但是,为什么需要这个呢?如果要将其作为参数传递,则可以(并且应该):
func foo(arg:UnsafeMutablePointer<Void>) { //... } var myStruct = TheStruct() foo(&myStruct)