如何在Swift中访问由UnsafePointer引用的结构的成员字段的UnsafePointer?

时间:2017-03-08 09:35:32

标签: swift unsafe-pointers

给出

public struct MIDIPacketList {
    public var numPackets: UInt32
    public var packet: (MIDIPacket)
}

我想访问一个UnsafeMutablePointer包,因为我有一个UnsafeMutablePointer。仅仅获取原始数据包成员的副本很简单,但不正确:我需要指针本身。   在C中,我想要实现的就像

一样简单
MIDIPacket *packet = &packetList->packet;

我如何在Swift中做同样的事情?   请注意,虽然我认为前进4个字节(UInt32的大小)很可能是一个黑客,但由于结构对齐问题,这是一个错误的答案。

1 个答案:

答案 0 :(得分:2)

这应该有效:

let packetList: UnsafeMutablePointer<MIDIPacketList> = ...

withUnsafeMutablePointer(to: &packetList.pointee.packet) {
    packet in // UnsafeMutablePointer<(MIDIPacket)>
    // ...
}

在闭包内,packet是指向MIDIPacket的指针。