2017-03-08 59 views
1

鑑於如何訪問Swift中UnsafePointer引用的結構的成員字段的UnsafePointer?

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

我想訪問包的UnsafeMutablePointer,因爲我有一個UnsafeMutablePointer。僅僅獲取原始數據包成員的副本很容易,但不正確:我需要指針本身。 在C,我想實現很簡單,只要

MIDIPacket *packet = &packetList->packet; 

我該怎麼做斯威夫特一樣嗎? 請注意,雖然我認爲前進4個字節(UInt32的大小)最有可能作爲破解工作,但由於結構對齊問題,這是不正確的答案。

回答

1

這應該工作:

let packetList: UnsafeMutablePointer<MIDIPacketList> = ... 

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

瓶蓋內,packet是一個指向MIDIPacket

+0

太好了,謝謝! –

相關問題