在隐式解包可选值 AVAUDIO Player SWIFT 时意外发现 nil

问题描述

我目前正在从 firebase 下载 m4a 文件并尝试使用 AVAudio Player 播放该文件

系统工作原理

  1. 获取下载文件的路径为字符串

let pathForAudio: String = UserDefaults.standard.string(forKey: "path") ?? "There is no path for the audio"

  1. 转换为网址

let url = URL(string: pathForAudio)

  1. 将 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"

这可能导致:

  1. 存储在 UserDefaults 中的有效文件路径
  2. 存储在 UserDefaults 中的无效文件路径
  3. UserDefaults 中没有存储任何内容,这将导致它成为 "There is no path for the audio"

除非您遇到场景 #1,否则您的下一次调用 (let url = URL(string: pathForAudio)) 将失败,返回一个 nil 值(这就是现在发生的情况。然后,在调用 try AVAudioPlayer(contentsOf: url!) 时,因为你用 ! 强制解包,你会崩溃,因为你有一个 nil 值,你告诉系统不是 nil 通过使用 { {1}}

简而言之,您需要将有效路径放入 ! 中才能使该系统正常工作。

我还会在此过程中进行一些错误检查。类似的东西:

UserDefaults