2016-08-04 3 views
2

У меня есть функция, написанная в Objective-C ниже, и я хочу преобразовать ее в Swift, но я продолжаю получать ошибки.Преобразование Objective-C в Swift

Ниже приводится код Objective-C:

- (void)openFileWithFilePathURL:(NSURL*)filePathURL 
{ 
    self.audioFile = [EZAudioFile audioFileWithURL:filePathURL]; 
    self.filePathLabel.text = filePathURL.lastPathComponent; 

    // 
    // Plot the whole waveform 
    // 
    self.audioPlot.plotType = EZPlotTypeBuffer; 
    self.audioPlot.shouldFill = YES; 
    self.audioPlot.shouldMirror = YES; 

    // 
    // Get the audio data from the audio file 
    // 
    __weak typeof (self) weakSelf = self; 
    [self.audioFile getWaveformDataWithCompletionBlock:^(float **waveformData, 
                 int length) 
    { 
     [weakSelf.audioPlot updateBuffer:waveformData[0] 
          withBufferSize:length]; 
    }]; 
} 

А вот мой Swift код:

func openFileWithFilePathURL(url: NSURL) { 
    let audioFile = EZAudioFile(URL: url) 
    audioPlot.plotType = EZPlotType.Buffer 
    audioPlot.shouldFill = true 
    audioPlot.shouldMirror = true 


    audioFile.getWaveformDataWithCompletionBlock({(waveformData, length) in 
     audioPlot.updateBuffer(waveformData[0], withBufferSize: length) 
    }) 
} 

И я всегда получаю ошибку

Command failed due to signal: Segmentation fault: 11 

Я новый на язык iOS, и я потратил часы на эту проблему. Я действительно не знаю, как решить эту проблему.

Я думаю, проблема заключается в том, как я преобразовал блок из Objective-C в Swift.

Благодарим за помощь!

+0

https://github.com/syedhali/EZAudio/issues/198 –

+0

http://stackoverflow.com/questions/31305488/how-to- write-block-with-arg-unsafemutablepointerunsafemutablepointerfloat –

+0

Эта ошибка (ошибка сегментации) в моем опыте является ошибкой в ​​самом коде Xcode, когда он дросселирует в синтаксисе, который действительно действителен. Обычно я пытаюсь скомпилировать различные варианты синтаксиса, пока он не будет работать. – paulvs

ответ

1

Вы можете попробовать это:

func openFileWithFilePathURL(filePathURL: NSURL) { 
    self.audioFile = EZAudioFile.audioFileWithURL(filePathURL) 
    self.filePathLabel.text = filePathURL.lastPathComponent 
    // 
    // Plot the whole waveform 
    // 
    self.audioPlot.plotType = EZPlotTypeBuffer 
    self.audioPlot.shouldFill = true 
    self.audioPlot.shouldMirror = true 
    // 
    // Get the audio data from the audio file 
    // 
    weak var weakSelf = self 
    self.audioFile.getWaveformDataWithCompletionBlock({(waveformData: Float, length: Int) -> Void in 
     weakSelf.audioPlot.updateBuffer(waveformData[0], withBufferSize: length) 
    }) 
} 
1

Это, как правило, ошибка Xcode. Единственное, что вы можете сделать, это попытаться изменить синтаксис, сначала по порядку строк, а затем сами фактические строки (т. Е. Линия type of имеет несколько вариантов). Вы также можете отправить отчет об ошибке в apple, если вы все еще можете его не исправить. (here)