我有这段代码可以播放声音,并且可以在不同的场景中工作,但是当我在这里使用它时,作为一个功能,当敌​​人碰撞时

func enemy1sound() {

    var enemy1sound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("enemy1sound", ofType: "m4a")!)
    println(enemy1sound)

    var error:NSError?
    audioPlayer = AVAudioPlayer(contentsOfURL: enemy1sound, error: &error)
    audioPlayer.prepareToPlay()
    audioPlayer.play()
}

它抛出了这个错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)

打印屏幕:

该函数是从以下位置调用的:
var randomEnemySound = Int(arc4random_uniform(4))
if randomEnemySound == 0 {
    enemy1sound()
}
else if randomEnemySound == 1 {
    enemy2sound()
}
else if randomEnemySound == 2 {
    enemy3sound()
}
else if randomEnemySound == 3 {
    enemy4sound()
}

但我不认为这是问题所在。

这是我的问题:

我究竟做错了什么?零钱在哪里?
我该如何解决?

感谢您的所有帮助。

最佳答案

我认为错误是关于使用强制展开运算符的:

var enemy1sound = NSURL(fileURLWithPath:
    NSBundle.mainBundle().pathForResource("enemy1sound", ofType: "m4a")!)
                                                                       ^

如果在您的应用程序逻辑中,该文件不存在是可能且合法的,那么我将使用可选的绑定(bind)来保护该行代码:
if let path = NSBundle.mainBundle().pathForResource("enemy1sound", ofType: "m4a") {
    let enemy1sound = NSURL(fileURLWithPath:path)
    println(enemy1sound)

    var error:NSError?
    audioPlayer = AVAudioPlayer(contentsOfURL: enemy1sound, error: &error)
    audioPlayer.prepareToPlay()
    audioPlayer.play()
}

但是,如果该声音文件应该存在,并且缺少声音文件是一种异常(exception)情况,则可以保留强制展开,因为这会导致错误冒泡,尽管会导致崩溃。在这种情况下,我将调查为什么找不到该文件-例如该文件实际上不存在,等等。

关于ios - Swift:声音返回零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27329761/

10-11 13:03
查看更多