斯威夫特:声音返回nil
问题描述:
我有了这个代码,播放声音,它在不同的场景的作品,但是当我在这里使用它,作为一个功能,当敌人碰撞斯威夫特:声音返回nil
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")!)
^
如果你的应用程序逻辑,是可能的,合法的文件不存在,那么我会保护该行代码与可选结合:
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()
}
然而,如果声音文件应该是存在的,它的缺失是一个特例,它的确定要离开*展开,因为这使得错误的泡沫,虽然导致飞机坠毁。在这种情况下,我会考虑为什么没有找到 - 例如,该文件实际上不存在,等等。
当我甚至尝试删除!,xcode说: 可选类型字符串的值,未解包:你的意思是使用!要么 ? ? – Betkowski 2014-12-06 08:35:24
@Betkowski:我的错误 - 查看更新的代码。但请注意,如果文件不存在,则不会播放声音 - 我不知道这是否正常,我只是想确保您知道这一点。 – Antonio 2014-12-06 08:40:05
代码现在可用;没有声音寿。我不知道为什么。声音在一个文件夹中,但其他声音在不同的场景中使用,并且它们都起作用。有任何想法吗? – Betkowski 2014-12-06 08:47:40