2016-04-30 13 views
3

SwiftでAudioStreamBasicDescriptionを定義しようとしています。Swift Error:メンバーが格納される前にStruct 'XX'を完全に初期化する必要があります

Objective-Cでは、次のようなコードを使用しました。

AudioStreamBasicDescription ASBD; 
ASBD.mSampleRate   = 8000; 
ASBD.mFormatID    = kAudioFormatLinearPCM; 
ASBD.mFormatFlags   = kAudioFormatFlagsCanonical | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; 
ASBD.mFramesPerPacket  = 1; 
ASBD.mChannelsPerFrame  = 1; 
ASBD.mBitsPerChannel  = 16; 
ASBD.mBytesPerPacket  = 2; 
ASBD.mBytesPerFrame   = 2; 

そして、私の変換スウィフトコードが怒鳴る

var ASBD: AudioStreamBasicDescription 
ASBD.mSampleRate = 8000 // ERROR here 
ASBD.mFormatID = kAudioFormatLinearPCM 
ASBD.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked 
ASBD.mFramesPerPacket = 1 
ASBD.mChannelsPerFrame = 1 
ASBD.mBitsPerChannel = 16 
ASBD.mBytesPerPacket = 2 
ASBD.mBytesPerFrame = 2 

である。しかし、このSWIFTコードの2行目は、このエラーを投げています。私はなぜこのエラーが発生しているのかわかりません。誰もがこれで私を助けてくれる?

答えて

7

慎重にエラーメッセージを確認し、理解してください。それはかなり自己記述的です。構造体を使用する前に構造体を完全に初期化する必要があります。 AudioStreamBasicDescriptionは構造体なので、使用する前に初期化する必要があります。正しいコードは次のようになります。

var ASBD: AudioStreamBasicDescription! = AudioStreamBasicDescription() 
ASBD.mSampleRate = 8000 
ASBD.mFormatID = kAudioFormatLinearPCM 
ASBD.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked 
ASBD.mFramesPerPacket = 1 
ASBD.mChannelsPerFrame = 1 
ASBD.mBitsPerChannel = 16 
ASBD.mBytesPerPacket = 2 
ASBD.mBytesPerFrame = 2 
関連する問題