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

标签 swift unsafe-pointers

给定

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

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

MIDIPacket *packet = &packetList->packet;

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

最佳答案

这应该有效:

let packetList: UnsafeMutablePointer<MIDIPacketList> = ...

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

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

关于swift - 如何访问 Swift 中 UnsafePointer 引用的结构的成员字段的 UnsafePointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42667639/

相关文章:

swift - 在 Swift 中捕获所有错误、异常,无论它是什么

swift - 如何快速将自己转换为 UnsafeMutablePointer<Void> 类型

swift - 将 UnsafeMutablePointer<Void> 指向自身

ios - 在 Swift 2.0 中创建 CMSampleBuffer 的副本

swift - 如何快速正确地从图像中提取数字数组?

ios - UIPickerView 作为多个 UITextField 的 inputView

ios - Swift: map View 消失/重新出现后,MapView geocodeAddressString 不起作用

swift - 为什么我们的 URLSession 对象是变量而不是常量

ios - 从 ViewController 向 View 传递数据时如何设置委托(delegate)?