gpt4 book ai didi

arrays - 如何在 Swift 中将 UnsafeArray 转换为 Array

转载 作者:行者123 更新时间:2023-11-28 11:23:47 24 4
gpt4 key购买 nike

一些 Cocoa 类,例如 AVFoundation 的 AVAudioPCMBuffer处理 float 据数组,这些数据在 Objective-C 中使用类型 float * 公开.

例如 AVAudioPCMBuffer 的 Objective-C 原型(prototype)是:

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

Swift 等价物是:

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

内部UnsafePointer<>可以解压为 UnsafeArray<CFloat>使用 UnsafeArray() ,但是如何将其转换为常规 Swift Array<Float>

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

最佳答案

Swift 数组封装在一个不透明的结构中,它与任意 C 的 float[] 数组具有不同的布局和内存管理。因此,如果您想在数据上使用 native Swift 数组语法,则必须复制数据,或者将 UnsafePointer 传递到 Swift 数组(已经包装在适当的 Swift 结构中)到 C 或 Objective C API,然后使用它当你取回数据时。

关于arrays - 如何在 Swift 中将 UnsafeArray<CFloat> 转换为 Array<Float>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24188715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com