Я работаю над старым учебным пособием по Swift (Swift 2.0), которое размещено на веб-сайте Рэя Вендерлиха (https://www.raywenderlich.com/2185-how-to-make-a-letter-word-game-with-uikit-and-swift-part-3-3)), и у меня возникает ошибка, когда я пытался переустановить функцию под названием «preloadAudioEffects»"в Swift 4.2. Ошибка? appendingPathComponent 'недоступна: вместо этого используйте appendingPathComponent для URL.
Я пытался переименовать старый код Swift [Ex: NSBundle в Bundle, stringByAppendingPathComponent в appendingPathComponent ()], ноЯ все еще сталкиваюсь с некоторыми проблемами синтаксиса из-за моей неопытности в Swift.
Это оригинальный код:
func preloadAudioEffects(effectFileNames:[String]) {
for effect in AudioEffectFiles {
//1 get the file path URL
let soundPath = NSBundle.mainBundle().resourcePath!.stringByAppendingPathComponent(effect)
let soundURL = NSURL.fileURLWithPath(soundPath)
//2 load the file contents
var loadError:NSError?
let player = AVAudioPlayer(contentsOfURL: soundURL, error: &loadError)
assert(loadError == nil, "Load sound failed")
//3 prepare the play
player.numberOfLoops = 0
player.prepareToPlay()
//4 add to the audio dictionary
audio[effect] = player
}
}
И это то, что я пытался сделать, следуя инструкциямпредложения в Xcode:
func preloadAudioEffects(effectFileNames:[String]) {
for effect in AudioEffectFiles {
//1 get the file path URL
let soundPath = Bundle.main.resourcePath!.appendingPathComponent(effect)
let soundURL = NSURL.fileURL(withPath: soundPath)
//2 load the file contents
var loadError:NSError?
let player = AVAudioPlayer(contentsOfURL: soundURL, error: &loadError)
assert(loadError == nil, "Load sound failed")
//3 prepare the play
player.numberOfLoops = 0
player.prepareToPlay()
//4 add to the audio dictionary
audio[effect] = player
}
}
- Получить полный путь к звуковому файлу и преобразовать его в URL, используя NSURL.fileURLWithPath ().
- Вызов AVAudioPlayer (contentsOfURL: error:) для загрузки звукового файла в аудиопроигрыватель.
- Установите значение numberOfLoops на ноль, чтобы звук вообще не зацикливался. Вызовите prepareToPlay () для предварительной загрузки Audio-буфер для этого звука.
- Наконец, сохраните объект проигрывателя в аудио словаре, используя имя файла в качестве ключа словаря.