Похоже, вы только что скопировали и вставили чужой код. Но вы вставили в какой-то другой код, поэтому проблема в том, что ваш код, воспроизводящий звук, оказался заключенным в объявление вложенной функции внутри вашего func buttonPressed
кода:
func playSound() {
guard let url = Bundle.main.url(forResource: "A", withExtension: "wav") else { return }
do {
player = try! AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.wav.rawValue)
player.play() // this is where sound _would_ play
}
}
Ничто никогда не вызывает эту функцию, поэтому она никогда не запускается.
Просто удалите те две строки, которые переносят код, и теперь код может выполняться как часть того, что делает buttonPressed
. Я бы также предложил удалить бессмысленную конструкцию do
, так что в итоге вы получите следующее:
guard let url = Bundle.main.url(forResource: "A", withExtension: "wav") else { return }
player = try! AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.wav.rawValue)
player.play() // this is where sound _would_ play
Ваш звук все еще может не воспроизводиться, или вы можете создать sh, но, по крайней мере, теперь код действительно будет работать!
Сказав все это, позвольте мне немного изменить код, чтобы продемонстрировать лучшие практики:
guard let url = Bundle.main.url(forResource: "A", withExtension: "wav") else {
print("the URL was not valid") // tell yourself what went wrong
return
}
do {
player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.wav.rawValue)
player.play()
} catch { print(error) } // tell yourself what went wrong
В этом версия, я положил конструкцию do
обратно, но на этот раз она действительно делает что-то полезное.