在 Swift 中播放音乐:在展开 Optional 值时意外发现 nil

Posted

技术标签:

【中文标题】在 Swift 中播放音乐:在展开 Optional 值时意外发现 nil【英文标题】:Playing music in Swift: Unexpectedly found nil while unwrapping an Optional value 【发布时间】:2017-10-18 04:09:13 【问题描述】:

在做一个项目时,我决定添加一些音乐以在触发某个动作时播放。这是我得到的:

var player : AVAudioPlayer?

几行之后...

func playSound()
    let alertSound = URL(fileURLWithPath: Bundle.main.path(forResource: "Kalimba", ofType: "wav")!)
    print(alertSound)

    try! AVAudiosession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    try! AVAudioSession.sharedInstance().setActive(true)

    try! player = AVAudioPlayer(contentsOf: alertSound)
    player!.prepareToPlay()
    player!.play()

每当我尝试这个时,触发操作时 xcode 都会向我抛出一个致命错误,说:

线程 1:致命错误:在展开可选值时意外发现 nil

【问题讨论】:

你让你的播放器成为一个可选值。然后强制使用播放器? How to play a sound in Swift?的可能重复 What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?的可能重复 你不应该在 Swift 中使用!,除非你可以绝对 100% 保证它在运行时永远不会为 nil。因此,请改用?,或者告诉我们,当您绝对有信心期待其他内容时,哪一行给出了nil 值。 【参考方案1】:

您应该检查您的音乐文件是否附有您的目标? -

    let path = Bundle.main.path(forResource: "Kalimba", ofType: "wav")
    if path != nil 
        let url = URL(fileURLWithPath: path!)
        print(url)
        let player = AVPlayer(url: url)
        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = self.view.bounds
        self.view.layer.addSublayer(playerLayer)
        player.play()
    else 
        print("File Not exist")
   

【讨论】:

如何附加目标? 从 xcode 导航器区域(xcode 中的左侧)然后从检查器(xcode 中的右侧)中选择您的音乐文件,然后在目标成员上进行复选标记,如上屏幕所示。 完美,谢谢!终于让它工作了,我的问题是目标附件。

以上是关于在 Swift 中播放音乐:在展开 Optional 值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

在 viewDidLoad Swift 3 中循环播放音频音乐的问题

Swift / Spritekit:通过特定场景播放音乐

如何在 Xcode 6.4 Swift 应用程序中添加播放背景音乐? [复制]

iOS+Swift:为啥音乐不能在 iPad 上播放?

如何让背景音乐继续播放而我的应用程序在使用 Swift 时仍然播放其声音

在 Swift (macOS) 中控制背景音乐