'return'之后的代码将永远不会执行

问题描述 投票:0回答:1

我正在编码的第一周。到目前为止,我正在迅速制作的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
ios swift iphone url avaudioplayer
1个回答
0
投票

您的问题是,有一个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)")
}
© www.soinside.com 2019 - 2024. All rights reserved.