我正在努力用swift初始化MusicPlayer.h中的MIDIMetaEvent结构头文件定义结构如下:
struct MIDIMetaEvent {
var metaEventType: UInt8
var unused1: UInt8
var unused2: UInt8
var unused3: UInt8
var dataLength: UInt32
var data: (UInt8)
}
Run Code Online (Sandbox Code Playgroud)
在"数据"成员之前,这似乎相当简单.这是1元素元组定义吗?我可以很容易地初始化所有其他结构元素但是徒劳地试图将"数据"设置为除单个值之外的任何其他内容.在我的代码中,我使用了一个名为myData的UInt8数组,并试图像这样初始化结构:
var msg = MIDIMetaEvent(
metaEventType : UInt8(0x7F),
unused1 : UInt8(0),
unused2 : UInt8(0),
unused3 : UInt8(0),
dataLength : UInt32(myData.count),
data : UnsafeBufferPointer<UInt8>(start: UnsafePointer<UInt8>(myData), count:myData.count) )
Run Code Online (Sandbox Code Playgroud)
但编译器对此并不满意,并抱怨"UnsafeBufferPointer无法转换为UInt8".如果我只是将数据设置为单个值但将dataLength设置为大于1的值,则生成的MIDIEventData显示事件中的第一个值是"数据"中的第一个值,后跟符合"dataLength"字节的乱码数据字节.很明显,"数据"被视为某种连续记忆.
那么如何将'data'元素设置为数组中的UInt8元素?