Код после возврата никогда не будет выполнен - PullRequest
0 голосов
/ 21 января 2020

У меня первая неделя кодирования. До сих пор приложение для обучения YouTube, которое я делаю в swift, отлично отошло от вышеприведенного сообщения об ошибке. Вот код Я переписал это дважды сейчас точно так, как они указывают. Я пытаюсь настроить звуки, чтобы играть в карточную игру, которую мы делаем, звуки играют, когда карты перетасовываются, переворачиваются, совпадают или неправильно совпадают. Сообщение об ошибке отображается для строки кода «let soundURL», «Код после« return »никогда не будет выполнен». Пожалуйста, помогите?

class SoundManager {

   static var audioPlayer:AVAudioPlayer?

    enum SoundEffect {

        case flip
        case shuffle
        case match
        case nomatch

    }

   static func playSound(_ effect:SoundEffect) {

        var soundFilename = ""

        // Determine which sound effect we want to play
        //and set the appropriate file name

        switch effect {

        case .flip:
            soundFilename = "cardflip"

        case .shuffle:
            soundFilename = "cardflip"

        case .match:
            soundFilename = "dingcorrect"

        case.nomatch:
            soundFilename = "dingwrong"

        }
        // 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)")
            }


        }

    }
}

Ответы [ 2 ]

1 голос
/ 21 января 2020

Полагаю, вы хотите, чтобы ваш код выглядел примерно так:

// 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)")
}

Если в скобках есть оператор guard с return, вы не хотите помещать код под return и в тех же скобках. Ни один из кодов ниже return не будет выполнен. В моем примере следующий код - вне скобок, что означает, что он будет выполняться до тех пор, пока есть значение для bundlePath.

0 голосов
/ 21 января 2020
Code after 'return' will never be executed



var soundFilename = ""

// Determine which sound effect we want to play
//and set the appropriate file name

switch effect {

case .flip:
    soundFilename = "cardflip"

case .shuffle:
    soundFilename = "cardflip"

case .match:
    soundFilename = "dingcorrect"

case.nomatch:
    soundFilename = "dingwrong"

}
// 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)")
    }
// }

}

Я полагаю, что вы неправильно поняли защитный синтаксис, поскольку он выполнит код, когда условие выполнено правильно, и перейдет в другую часть, когда условие будет ложным. Поэтому он будет использовать return in else без какого-либо другого кода, так что метод будет завершен изящно, не давая никакого cra sh.

Ключевое слово return используется для возврата чего-либо при выполнении метода или для выхода из метода.

Таким образом, вам нужно закрыть остальную часть с помощью «}» и удалить один блок захвата ниже. Надеюсь, это поможет.

...