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

所以基本上我从这个StackOverflow 答案中找到了上面的代码,它使用的是以前版本的 Swift。现在在 Swift 3.0 中,但是上面的初始化AudioConverterRef器不可用。

我注意到这AudioConverterRef是对音频转换器对象的引用,我想它是一个AVAudioConverter.

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

4

1 回答 1

3

如你所知,在 Swift 2.xAudioConverterRef中只是一个类型别名,在 Swift 3 中是一个类型别名。COpaquePointerOpaquePointer

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

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

因此,对于简短的问题:

var audioConverter : AudioConverterRef? = nil
audioConverter = nil

而对于更长的:

类型AudioConverterRef声明为:

typedef struct OpaqueAudioConverter *   AudioConverterRef;

并且类型struct OpaqueAudioConverter是隐藏的 C-struct。它不仅仅是引用AVAudioConverter,还可能包含一些信息以使用基于 C 函数的 AudioConverter API。它的属性可能比 中的类似属性更原始的形式AVAudioConverter

如果您需要AudioConverterRef的所有功能都在AVAudioConverter.

于 2016-12-25T15:36:46.653 回答