如何用arg写块。 &#34; UnsafeMutablePointer <unsafemutablepointer <浮动>&GT;&#34;在Swift关闭

时间:2015-07-08 23:18:24

标签: objective-c swift

请帮助语法:

__weak typeof (self) weakSelf = self;
[self.audioFile getWaveformDataWithCompletionBlock:^(float **waveformData,
                                                     int length)
{
    [weakSelf.audioPlot updateBuffer:waveformData[0]
                      withBufferSize:length];
}];

波形数据本身将是一个浮点数组,每个通道一个,长度表示每个浮点数组的总长度。  @param waveformData一个float数组的数组,每个数组表示来自文件的音频数据通道  @param length一个int,表示浮动音频数据的每个通道的长度

我快速地说:

cell.audioFile.getWaveformDataWithCompletionBlock { (UnsafeMutablePointer<UnsafeMutablePointer<Float>>, Int32) -> Void 

}

我坚持使用UnsafeMutablePointer&gt;

我需要使用这个arg。在:

cell.audioWaveView.updateBuffer(buffer:UnsafeMutablePointer,withBufferSize:Int32)

2 个答案:

答案 0 :(得分:1)

我知道这可能是一个老问题,但我在同样的事情上挣扎,我终于解决了:

您需要将参数作为WaveformDataCompletionBlock闭包传递给块,并且您的参数应该是UnsafeMutablePointer和UInt32。所以代码应该是这样的:

self.audioFile = EZAudioFile(URL: self.soundFileURL)
var waveClosure: WaveformDataCompletionBlock = {
  (waveForData: UnsafeMutablePointer<Float>, length: UInt32) in
  //Do something
}
self.audioFile.getWaveformDataWithCompletionBlock(waveClosure)

我希望这对某些人有用:)

答案 1 :(得分:0)

类似于@ FelipeDev.-发布的,这个问题很老但今天仍然帮助了我(感谢Felipe!)。然而,现在有一个稍微更新的答案,现在有更新版本的EZAudio和Swift。我使用以下代码使用它:

var waveClosure: EZAudioWaveformDataCompletionBlock = {
        (waveformData: UnsafeMutablePointer<UnsafeMutablePointer<Float>>, length: Int32) in
        //Do something like update the audio plot buffer if you are plotting the waveform
        self.audioPlot.updateBuffer(waveformData[0], withBufferSize: UInt32(length))
    }
self.audioFile.getWaveformDataWithCompletionBlock(waveClosure)

希望这有帮助!