2015-10-28 47 views
1

我正在使用AVFoundation框架在swift中編寫一個簡單的播放器。除了我的播放器一遍又一遍地播放同一首歌外,一切似乎都在起作用。我的播放列表中只有一首歌,所以這很有意義。我試圖做的是檢查audioPlayerDidFinishPlaying標誌,以確保它完成播放,然後我會讓它停止。我不知道如何執行調用來獲得這裏的國旗是我的代碼。SWIFT中的audioPlayerDidFinishPlaying功能

mp3Player?.play() 
    **if (mp3Player?.audioPlayerDidFinishPlaying:successfully) {** 
    mp3Player?.stop() 
} 

正確的方式來獲得該標誌的目標C是:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{ 
NSLog(@"audioPlayerDidFinishPlaying"); 
} 

誰能解釋如何實現在SWIFT同樣的功能?這是我在SWIFT的第一個項目。我嘗試閱讀SWIFT中的空白函數,但沒有運氣。

我得到的是無法將類型「AVAudioPlayer.Type」預期參數類型的值的誤差「AVAudioPlayer」

回答

5

您可以交叉檢查,雖然開始播放音頻numberOfLoops設置爲0delegate設爲self或控制器,您的播放器正在播放。

mp3Player?.numberOfLoops = 0 
    mp3Player?.delegate = self 

在同一類中實現的AVAudioPlayer像如下所示的方法delegate

func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool) { 
    //You can stop the audio 
    player.stop() 

} 
+0

謝謝。現在它變得更有意義。我只是在audioPlayerDidFinishPlaying中添加了player.stop(),並且程序按預期工作。 – Sophman

0

我能夠在mp3播放器類中實現一個解決方案,如下所示。

func audioPlayerDidFinishPlaying(player: AVAudioPlayer, 
    successfully flag: Bool){ 
     if flag == true { 
     ++self.numberOfLoops 
     GlobalVariables.NumberOfLoops = numberOfLoops 
     numberOfLoopsReq = GlobalVariables.NumberOfLoopsRequired 
     player.stop() 
     if numberOfLoops < numberOfLoopsReq { 
       // delay before and play 
       let delay = GlobalVariables.DelayBeforeSong * Double(NSEC_PER_SEC)// nanoseconds per second 
       let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 
       dispatch_after(delayTime, dispatch_get_main_queue(),{ 
        self.player!.play() 
        }) 
              } 
              }