初始化 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 中编写上述代码?更长的问题是创建仅引用 AVAudioConverter
的 AudioConverterRef
有什么用?不是所有的变量都只是引用一个对象吗?
如您所知,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
。
var audioConverter : AudioConverterRef = nil
audioConverter = AudioConverterRef.init()
所以基本上我从这个 AudioConverterRef
的上述初始化程序不可用。
我注意到 AudioConverterRef
是对音频转换器对象的引用,我认为它是 AVAudioConverter
。
所以,简短的问题是如何在 Swift 3.0 中编写上述代码?更长的问题是创建仅引用 AVAudioConverter
的 AudioConverterRef
有什么用?不是所有的变量都只是引用一个对象吗?
如您所知,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
。