如何解决在隐式解包可选值 AVAUDIO Player SWIFT 时意外发现 nil
我目前正在从 firebase 下载 m4a 文件并尝试使用 AVAudio Player 播放该文件。
系统工作原理
- 获取下载文件的路径为字符串
let pathForAudio: String = UserDefaults.standard.string(forKey: "path") ?? "There is no path for the audio"
- 转换为网址
let url = URL(string: pathForAudio)
- 将 URL 传递给 AVAUDIOPLAYER 函数
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。