2016-12-25 41 views
1
var audioConverter : AudioConverterRef = nil 
audioConverter = AudioConverterRef.init() 

所以基本上我有上面的代碼發現從這StackOverflow answer使用以前的版本的Swift。現在在Swift 3.0中,上述AudioConverterRef的初始化程序不可用。初始化一個AudioConverterRef Swift 3.0

我注意到AudioConverterRef是一個音頻轉換器對象的引用,我認爲這是一個AVAudioConverter

所以,簡短的問題是我將如何在Swift 3.0中編寫上述代碼?而更長的問題將是創建AudioConverterRef的用途是什麼,只是引用AVAudioConverter?不是所有的變量都只是引用一個對象嗎?

回答

2

如你所知,AudioConverterRef只是一個在斯威夫特2.X COpaquePointer typealias,是OpaquePointer在斯威夫特一個typealias 3.

可是一個你應該認識顯著的變化是不是這個名字,但它是功能常見於斯威夫特3所有指針:

  • 在斯威夫特3,指針類型不能包含nil,如果你想存儲nil爲指針類型的變量,你需要將其申報爲可選的指針。 (SE-0055

所以,對於短期的問題:

var audioConverter : AudioConverterRef? = nil 
audioConverter = nil 

而對於較長的一個:

類型AudioConverterRef聲明爲:

typedef struct OpaqueAudioConverter * AudioConverterRef; 

而且類型struct OpaqueAudioConverter是一個隱藏的C結構。它不只是引用AVAudioConverter,但可能會持有一些信息與基於C函數的AudioConverter API一起工作。其性質可能比AVAudioConverter中的類似屬性更爲原始形式。

如果您需要的所有功能都可用於AVAudioConverter,則無需使用AudioConverterRef