如何访问 Swift 中 UnsafePointer 引用的结构的成员字段的 UnsafePointer?
How do I access UnsafePointer of member field of a struct referenced by an UnsafePointer in Swift?
给定
public struct MIDIPacketList {
public var numPackets: UInt32
public var packet: (MIDIPacket)
}
假设我有一个 UnsafeMutablePointer,我想访问数据包的一个 UnsafeMutablePointer。仅仅获得原始数据包成员的副本很容易,但不正确:我需要指针本身。
在C中,我想实现的很简单
MIDIPacket *packet = &packetList->packet;
如何在 Swift 中执行相同的操作?
请注意,虽然我认为前进 4 个字节(UInt32 的大小)最有可能作为黑客工作,但由于结构对齐问题,这是一个不正确的答案。
这应该有效:
let packetList: UnsafeMutablePointer<MIDIPacketList> = ...
withUnsafeMutablePointer(to: &packetList.pointee.packet) {
packet in // UnsafeMutablePointer<(MIDIPacket)>
// ...
}
在闭包内部,packet
是指向 MIDIPacket
的指针。
给定
public struct MIDIPacketList {
public var numPackets: UInt32
public var packet: (MIDIPacket)
}
假设我有一个 UnsafeMutablePointer,我想访问数据包的一个 UnsafeMutablePointer。仅仅获得原始数据包成员的副本很容易,但不正确:我需要指针本身。 在C中,我想实现的很简单
MIDIPacket *packet = &packetList->packet;
如何在 Swift 中执行相同的操作? 请注意,虽然我认为前进 4 个字节(UInt32 的大小)最有可能作为黑客工作,但由于结构对齐问题,这是一个不正确的答案。
这应该有效:
let packetList: UnsafeMutablePointer<MIDIPacketList> = ...
withUnsafeMutablePointer(to: &packetList.pointee.packet) {
packet in // UnsafeMutablePointer<(MIDIPacket)>
// ...
}
在闭包内部,packet
是指向 MIDIPacket
的指针。