我正在编码的第一周。到目前为止,我正在迅速制作的youtube教程应用与上述错误消息完全不同。这是代码。我已经按照他们指定的那样重写了两次。我正在尝试设置声音以与我们正在制作的纸牌游戏一起玩,这些声音在纸牌随机播放,转身,匹配或不正确匹配时播放。错误消息显示为“ let soundURL”代码行,“'返回'后的代码将永远不会执行”。请帮忙吗?
// Create a URL object from this string path
let soundURL = URL(fileURLWithPath: bundlePath!)
do {
// Create audio player object
audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
// Play the sound
audioPlayer?.play()
}
catch {
// Could'nt create audio player object, log the error
print("Could'nt create the audio player object for sound file \(soundFilename)")
}
编辑:这是错误消息上方的代码,其中包含“ return”。
// Get the path to the sound file inside the bundle
let bundlePath = Bundle.main.path(forResource: soundFilename, ofType: "wav")
guard bundlePath != nil else {
print("Couldn't find sound file \(soundFilename) in the bundle")
return
您的问题是,有一个guard语句正在处理可选的bundlePath
值。您位于soundFilename
.wav的文件实际上不存在。您的代码正在检查以确保它在那里。如果不是,那么它将转到return
,即退出该方法。
guard
语句是一种有用的表达方式:“如果存在,请继续执行代码。如果不存在,请退出该方法。”这样,不会出现导致应用程序崩溃的致命错误。
您能否让我们知道soundFilename
的值是多少?此外,请确保soundFilename
.wav实际上在您的Xcode包中。
此外,我相信您希望您的代码看起来像这样:
// Get the path to the sound file inside the bundle
let bundlePath = Bundle.main.path(forResource: soundFilename, ofType: "wav")
guard bundlePath != nil else {
print("Couldn't find sound file \(soundFilename) in the bundle")
return
}
// Create a URL object from this string path
let soundURL = URL(fileURLWithPath: bundlePath!)
do {
// Create audio player object
audioPlayer = try AVAudioPlayer(contentsOf: soundURL)
// Play the sound
audioPlayer?.play()
}
catch {
// Could'nt create audio player object, log the error
print("Could'nt create the audio player object for sound file \(soundFilename)")
}