问题描述
我目前正在从 firebase 下载 m4a 文件并尝试使用 AVAudio Player 播放该文件。
系统工作原理
let pathForAudio: String = UserDefaults.standard.string(forKey: "path") ?? "There is no path for the audio"
- 转换为网址
let url = URL(string: pathForAudio)
soundplayer = try AVAudioPlayer(contentsOf: url!)
在执行 soundplayer.play() 时,我得到“在隐式解包可选值时意外发现 nil”
我在 Stack Before 上看到过这个问题,他们只是启用了静态文件的权限。这里的文件路径总是在变化,所以我无法执行他们的解决方案。
非常感谢任何帮助,如果您需要其他代码块,请告诉我。非常感谢!
解决方法
你这样定义你的路径:
let pathForAudio: String = UserDefaults.standard.string(forKey: "path") ?? "There is no path for the audio"
这可能导致:
- 存储在
UserDefaults
中的有效文件路径 - 存储在
UserDefaults
中的无效文件路径 -
UserDefaults
中没有存储任何内容,这将导致它成为"There is no path for the audio"
除非您遇到场景 #1,否则您的下一次调用 (let url = URL(string: pathForAudio)
) 将失败,返回一个 nil
值(这就是现在发生的情况。然后,在调用 try AVAudioPlayer(contentsOf: url!)
时,因为你用 !
强制解包,你会崩溃,因为你有一个 nil
值,你告诉系统不是 nil 通过使用 { {1}}
简而言之,您需要将有效路径放入 !
中才能使该系统正常工作。
我还会在此过程中进行一些错误检查。类似的东西:
UserDefaults