初始化 AudioConverterRef Swift 3.0

Initialize an AudioConverterRef Swift 3.0

var audioConverter : AudioConverterRef = nil
audioConverter = AudioConverterRef.init()

所以基本上我从这个 中找到了上面的代码,它使用了 Swift 的早期版本。现在在 Swift 3.0 中,但是 AudioConverterRef 的上述初始化程序不可用。

我注意到 AudioConverterRef 是对音频转换器对象的引用,我认为它是 AVAudioConverter

所以,简短的问题是如何在 Swift 3.0 中编写上述代码?更长的问题是创建仅引用 AVAudioConverterAudioConverterRef 有什么用?不是所有的变量都只是引用一个对象吗?

如您所知,AudioConverterRef 只是 Swift 2.x 中 COpaquePointer 的类型别名,并且是 Swift 中 OpaquePointer 的类型别名] 3.

但是您应该意识到的一个重要变化不是名称,而是 Swift 3 中所有指针共有的特征:

  • 在Swift 3,指针类型不能包含nil,如果要将nil存储到指针类型变量,需要声明为Optional指针。 (SE-0055)

所以,对于简短的问题:

var audioConverter : AudioConverterRef? = nil
audioConverter = nil

对于较长的:

类型AudioConverterRef声明为:

typedef struct OpaqueAudioConverter *   AudioConverterRef;

并且类型 struct OpaqueAudioConverter 是一个隐藏的 C 结构。它不仅引用 AVAudioConverter,而且可能包含一些信息以使用基于 C 函数的 AudioConverter API。与 AVAudioConverter.

中的类似属性相比,它的属性可能以更原始的形式存在

如果您需要的所有功能在 AVAudioConverter 中都可用,则您无需使用 AudioConverterRef