如何防止AVAudioPlayer类的新实例被创建每次视图控制器加载- Swift



我正在使用Swift构建一个简单的音频播放器应用程序。我的故事板中有两个视图控制器。第二个视图控制器创建AVAudioPlayer的实例,用于播放音频。我希望用户能够离开那个视图控制器,使用应用程序中的其他功能,然后回到那个视图控制器来操作播放器。

问题是,当我播放一些音频时,导航离开,然后回到播放器视图控制器并再次按播放,两个版本的音频文件同时播放。

我猜它正在创建AVAudioPlayer对象的新实例,而不是操纵我第一次制作的实例。我认为这与Swift去分配然后重新初始化播放器视图控制器有关?

相关代码如下:

import UIKit
import AVFoundation
class ViewController: UIViewController {
  var player: AVAudioPlayer = AVAudioPlayer()
  let audioPath = NSBundle.mainBundle().pathForResource("daftPunk", ofType: "mp3")!
  @IBOutlet var volumePosition: UISlider!
  @IBOutlet var scrubPosition: UISlider!
  @IBAction func play(sender: AnyObject) {
    player.play()
}

我认为最快的解决方案是创建一个单例类来包装AVAudioPlayer对象。

class AudioPlayer {
   var player: AVAudioPlayer = AVAudioPlayer()
   let audioPath = NSBundle.mainBundle().pathForResource("daftPunk", ofType:     "mp3")!
   static let sharedInstance = AudioPlayer()
   init() { }
}
然后使用AudioPlayer.sharedInstance.player.play()。这样,你将永远只有一个AudioPlayer实例,因此AVAudioPlayer。

最新更新