(Swift2.3) Доступ к экземпляру класса из другого класса
Новое в Swift. Я пытаюсь контролировать воспроизведение фоновой музыки в моем приложении. В настоящее время у меня музыка запускается в моем MainTabController. Он играет, как и ожидалось, когда я перемещаюсь по остальным VC. Я хотел бы, чтобы это прекратилось, когда показываются определенные ВК.
У меня настроен класс MusicHelper.
class MusicHelper {
static let sharedHelper = MusicHelper()
var audioPlayer: AVAudioPlayer?
func playBackgroundMusic(file : String, repeats : Int) {
let aSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(file, ofType: "mp3")!)
do {
audioPlayer = try AVAudioPlayer(contentsOfURL:aSound)
audioPlayer!.numberOfLoops = repeats
audioPlayer!.prepareToPlay()
audioPlayer!.play()
} catch {
print("Cannot play the file")
}
}
func togglePlayer(){
if((audioPlayer?.playing) == true){
audioPlayer?.stop()
}else{
audioPlayer?.play()
}
}
}
Как я запускаю музыку изначально в моем MainTabController:
class MainTabController: UINavigationController {
var bgMusic : MusicHelper = MusicHelper()
override func viewDidLoad() {
super.viewDidLoad()
// other code
bgMusic.playBackgroundMusic("music_background", repeats: -1)
}
}
Я пытаюсь получить доступ к этому же экземпляру bgMusic, но он возвращает ноль. Я предполагаю, что я на самом деле делаю новый экземпляр MainTabController? Если да, то как мне получить доступ к тому же экземпляру MusicHelper?
class VideoViewController: OrientationLockedVC {
//Other code
var mVC : MainTabController = MainTabController()
func onImage() {
//other code
mVC.bgMusic.audioPlayer!.stop()
// other code
}
}
Я не получаю никаких явных ошибок, но если я установлю точку останова, я ясно вижу, что audioController равен нулю.
Спасибо
1 ответ
+ Изменить var audioPlayer: AVAudioPlayer?
за public static var audioPlayer: AVAudioPlayer?
и позвонить
if MusicHelper.audioPlayer != nil{
MusicHelper.audioPlayer.stop()
}