如何在Swift中将UnsafeArray <cfloat>转换为Array <float>?</float> </cfloat>

时间:2014-06-12 15:50:50

标签: arrays swift

一些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复制到一个新的数组,但这很昂贵,对大型数组来说并不可行。

1 个答案:

答案 0 :(得分:3)

Swift数组包含在一个不透明的结构中,它具有与任意C float []数组不同的布局和内存管理。因此,如果要在其上使用本机Swift数组语法,则必须复制数据,或者将UnsafePointer传递到Swift数组(已经包含在正确的Swift结构中)到C或Objective C API,并使用它当你收到数据时。