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