2017-12-07 11 views
0

私はSwiftにとって非常に新しいです。私の質問が馬鹿に聞こえたら許してください。配列の作成によって '式のタイプがより多くのコンテキストなしで曖昧です'

次のように私は、構造を宣言している:

struct RecorderState 
{ 
    var setupComplete: Bool 
    var dataFormat: AudioStreamBasicDescription 
    var queue: UnsafeMutablePointer<AudioQueueRef> 
    var buffers: [AudioQueueBufferRef] 
    var recordFile: AudioFileID 
    var bufferByteSize: UInt32 
    var currentPacket: Int64 
    var isRunning: Bool 
    var recordPacket: Int64 
    var errorHandler: ((NSError) -> Void)? 
} 

は、今私は、その内部構造を初期化し、私のクラスのinitメソッドを記述する必要があります。

​​

問題があり、エラーは、「式のタイプは、より多くの文脈のない曖昧である」行buffers: Array<AudioQueueBufferRef>(repeating: 0, count: numberBuffers)に表示を続けています。

enter image description here

私は他の方法を試してみましたが、それでも同じ。

enter image description here

私はここError: 'Type of expression is ambiguous without more context'から読んだものから、コンパイラは、したがって、それはエラーを示してオブジェクトの型を知らないということです。しかしここで、私はすでにそれを宣言しました。

コンストラクタメソッドの後に追加して再度キャストしようとしましたが、まだ動作しませんでした。

enter image description here

私はなぜ理解していません。私は、バッファの変数の型がを含むArrayであると宣言しました。しかし、どのようにコンパイラはまだそれを検出することはできませんか?

+2

' AudioQueueBufferRef'が '' UnsafeMutablePointer のためtypealiasである、あなたは '0'を渡すことはできません。 –

+0

@MartinRこんにちは、ありがとう!今はうまくいきます。 –

答えて

0

Martin R's のコメントの結果。あなたが初期値としてAudioQueueBuffer` `へのポインタを渡す必要があり

すなわち
class SimplePCMRecorder : NSObject 
{ 
    private var recorderState: RecorderState 
    init(numberBuffers: Int) 
    { 

     self.recorderState = RecorderState(
      setupComplete: false, 
      dataFormat: AudioStreamBasicDescription(), 
      queue: UnsafeMutablePointer<AudioQueueRef>.allocate(capacity: 1), 
      buffers: Array<UnsafeMutablePointer<AudioQueueBuffer>>(repeating: UnsafeMutablePointer<AudioQueueBuffer>(bitPattern: 0)! , count: numberBuffers), 
      recordFile:AudioFileID(bitPattern: 0)!, 
      bufferByteSize: 0, 
      currentPacket: 0, 
      isRunning: false, 
      recordPacket: 0, 
      errorHandler: nil 
     ) 
    } 
} 
関連する問題