2015-10-28 39 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() 
        }) 
              } 
              }