一些Cocoa类,例如AVFoundation的AVAudioPCMBuffer
处理浮点数据数组,它们使用类型float *
在Objective-C中公开。
例如AVAudioPCMBuffer
的Objective-C原型是:
@property(nonatomic, readonly) float *const *floatChannelData
Swift等价物是:
var floatChannelData: UnsafePointer<UnsafePointer<CFloat>> { get }
可以使用UnsafePointer<>
将内部UnsafeArray<CFloat>
解压缩到UnsafeArray()
,但是如何将其转换为常规的Swift Array<Float>
?
我可以迭代每个Float,将每个Float复制到一个新的数组,但这很昂贵,对大型数组来说并不可行。
答案 0 :(得分:3)
Swift数组包含在一个不透明的结构中,它具有与任意C float []数组不同的布局和内存管理。因此,如果要在其上使用本机Swift数组语法,则必须复制数据,或者将UnsafePointer传递到Swift数组(已经包含在正确的Swift结构中)到C或Objective C API,并使用它当你收到数据时。