【问题标题】:How do you convert from UnsafeArray<CFloat> to Array<Float> in Swift?如何在 Swift 中将 UnsafeArray<CFloat> 转换为 Array<Float>?
【发布时间】:2014-06-12 15:50:49
【问题描述】:

一些 Cocoa 类,例如 AVFoundation 的 AVAudioPCMBuffer 处理浮点数据数组,它们在 Objective-C 中使用类型 float * 公开。

例如 AVAudioPCMBuffer 的 Objective-C 原型是:

@property(nonatomic, readonly) float *const *floatChannelData

等效的 Swift 是:

var floatChannelData: UnsafePointer<UnsafePointer<CFloat>> { get }

可以使用UnsafeArray() 将内部UnsafePointer&lt;&gt; 解压缩为UnsafeArray&lt;CFloat&gt;,但是如何将其转换为常规的Swift Array&lt;Float&gt;

我可以遍历每个浮点数,将每个浮点数复制到一个新数组中,但这很昂贵,而且对于大型数组来说并不可行。

【问题讨论】:

    标签: arrays swift


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 2014-07-31
      • 2023-03-31
      相关资源
      最近更新 更多