初始化音频转换器REF Swift 3.0

初始化音频转换器REF Swift 3.0,swift,reference,swift3,avfoundation,opaque-pointers,Swift,Reference,Swift3,Avfoundation,Opaque Pointers,所以基本上我有上面的代码,它使用的是以前版本的Swift。但是,现在在Swift 3.0中,AudioConverterRef的上述初始值设定项不可用 我注意到,AudioConverterRef是对音频转换器对象的引用,我认为它是一个AVAudioConverter 所以,简短的问题是我将如何在Swift 3.0中编写上述代码?更长的问题是,创建一个只引用一个AVAudioConverter的AudioConverterRef有什么用?难道不是所有变量都只是引用一个对象吗?正如您所知,Audi

所以基本上我有上面的代码,它使用的是以前版本的Swift。但是,现在在Swift 3.0中,
AudioConverterRef
的上述初始值设定项不可用

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


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

正如您所知,
AudioConverterRef
在Swift 2.x中只是一个类型别名
COpaquePointer
,在Swift 3中是一个类型别名
OpaquePointer

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

  • 在Swift 3中,指针类型不能包含
    nil
    ,如果要将
    nil
    存储到指针类型变量,则需要将其声明为可选指针。()
因此,对于一个简短的问题:

var audioConverter : AudioConverterRef = nil
audioConverter = AudioConverterRef.init()
对于较长的一个:

类型
AudioConverterRef
声明为:

var audioConverter : AudioConverterRef? = nil
audioConverter = nil
类型
struct OpaqueAudioConverter
是一个隐藏的C-struct。它不仅引用了
AVAudioConverter
,还可能保存了一些信息,以便使用基于C函数的音频转换器API。它的属性可能以比
AVAudioConverter
中类似属性更原始的形式保存


如果在
AVAudioConverter
中提供了所需的所有功能,则无需使用
AudioConverterRef

OpaquePointer的奇怪之处在于类型本身是可选的,需要取消装箱,但除非声明为可选,否则无法将其初始化为nil。看起来编译器没有生成双可选的,所以是的,这是唯一的方法。
typedef struct OpaqueAudioConverter *   AudioConverterRef;