【发布时间】:2024-01-19 21:44:01
【问题描述】:
我在 Swift 中有一个桥接函数,它在 C 中的参数之一是AudioBufferList *。在 Swift 中,这会生成一个UnsafePointer<AudioBufferList>。我已经设法通过调用audioData[0] 来尊重指针(有更好的方法吗?)。但我正在努力处理接下来的 2 层:AudioBuffer 的 .mBuffers 数组及其 void * / UnsafePointer<()> .mData 成员。
在 C 中它只是
Float32 *audioData = (Float 32*)abl->mBuffers[0]->mData;
output = audioData[sampleNum]...
在 Swift 中,第一个奇怪的事情是它不允许我访问 mBuffers 的元素,但是当我将它作为属性访问时非常高兴。换句话说,这行得通,甚至有正确的数据(我认为是mBuffers 的第一个成员)......
println(abl[0].mBuffers.mNumberChannels) // But .mBuffers should be an []!
其次,让我打印出.mData下标,但值始终是()
println(abl[0].mBuffers.mData[10]) // Prints '()'
我尝试了各种转换操作并使用多个索引进行访问,但无济于事...有什么想法吗?
为方便起见,这里是 AudioBufferList 和 AudioBuffer 的 C 和 Swift 定义...
// C
struct AudioBufferList
{
UInt32 mNumberBuffers;
AudioBuffer mBuffers[1]; // this is a variable length array of mNumberBuffers elements
// ...and a bit more for c++
}
struct AudioBuffer
{
UInt32 mNumberChannels;
UInt32 mDataByteSize;
void* mData;
};
...
// SWIFT
struct AudioBufferList {
var mNumberBuffers: UInt32
var mBuffers: (AudioBuffer)
}
struct AudioBuffer {
var mNumberChannels: UInt32
var mDataByteSize: UInt32
var mData: UnsafePointer<()>
}
【问题讨论】:
标签: ios objective-c pointers casting swift