我在编码方面仍是初学者,但我正在开发一个非常基础的音乐播放器,以了解 Swift 的工作原理。
////Functions
//Play chosen file function
func playChosenFile() {
//Set up the music file URL.
let musicFilePathURL = MenuBarModel.mainMenu.URL
if musicFilePathURL != nil {
//Initialize audioPlayer with safety.
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: musicFilePathURL!)
}
catch {
}
}
else if musicFilePathURL == nil {
//Some code that will make the player do nothing.
}
}
//Play function
func play() {
playChosenFile()
audioPlayer.play()
}
因此,如果我使用 NSOpenPanel() 选择音频文件,则 musicFilePathURL 会使用 URL 进行初始化。
如果我确实使用 NSOpenPanel() 选择文件,那么 musicFilePathURL 具有所选文件的位置,然后传递给 AVAudioPlayer。一旦我按下播放按钮,函数“play()”就会执行,然后它会执行 playChosenFile() 和 audioPlayer.play()。
如果我在按下播放按钮之前执行此操作,音乐播放器会播放歌曲。
如果我在选择要播放的任何文件之前按下播放按钮,程序就会崩溃,因为 musicFilePathURL 为 nil。
如果在按下播放按钮之前没有选择文件,我对如何使程序不崩溃感到困惑。例如,如果您打开 VLC,如果您按下播放按钮,它会提示选择一个文件,但如果您决定按下取消,播放器什么也不做。
如果我在启动时没有选择音频文件而按下播放按钮,我怎样才能让我的程序什么都不做?
最佳答案
您对音频播放器的 try/catch 语句有了正确的想法,但您可能会在 play() 函数中使用另一个语句。
这样,当 audioPlayer 尝试播放空对象时,将捕获异常,您可以自行处理它,而不是让应用程序崩溃。
也许是这样的?我会尝试一下,但不幸的是我把 Mac 忘在家里了。
func play(){
do {
playChosenFile()
audioPlayer.play()
} catch {
print "Error Occurred (Did the user specify a file?)
}
}
关于swift - 当 AVAudioPlayer URL 为 nil 时停止崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37446239/