我有这个播放声音的代码,它适用于不同的场景,但是当我在这里使用它时,作为一个函数,当敌人发生碰撞时
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()
}
但我认为这不是问题所在。
这是我的问题:
我做错了什么?哪个是零? 我该如何解决?
感谢您的帮助。
答案 0 :(得分:1)
我认为错误是关于使用强制解包运算符:
var enemy1sound = NSURL(fileURLWithPath:
NSBundle.mainBundle().pathForResource("enemy1sound", ofType: "m4a")!)
^
如果你的应用程序逻辑中存在该文件的可能性和合法性,那么我会使用可选的绑定来保护该行代码:
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()
}
但是,如果该声音文件应该存在,并且它的缺席是一种例外情况,则可以保留强制解包,因为这会导致错误冒泡,但会导致崩溃。在这种情况下,我会调查为什么找不到它 - 例如,文件实际上不存在等等。