Swift 3中解析的流式音频

Swift 3中解析的流式音频,swift,parse-platform,avplayer,back4app,Swift,Parse Platform,Avplayer,Back4app,我正在使用Back4app作为解析服务器 我正在尝试从Prase流式播放音频 一切正常,但如果我单击tableview上的任何索引(索引0除外),我会收到错误“致命错误:在展开可选值时意外发现为零” 我不知道为什么当我点击索引0时,它工作正常,但我得到的任何其他索引错误 func grabSong() { let SongQuery = PFQuery(className: "Songs") SongQuery.getObjectInBackground(wit

我正在使用Back4app作为解析服务器 我正在尝试从Prase流式播放音频 一切正常,但如果我单击tableview上的任何索引(索引0除外),我会收到错误“致命错误:在展开可选值时意外发现为零”

我不知道为什么当我点击索引0时,它工作正常,但我得到的任何其他索引错误

func grabSong() {        
    let SongQuery = PFQuery(className: "Songs")

    SongQuery.getObjectInBackground(withId:iDArray[SelectedSongNumber!] ,block: { (object : PFObject?, error : Error?) ->  Void in           
        if let AudioFileURLTemp : PFFile = object?.value(forKey: "SongFile") as? PFFile {            
            print(AudioFileURLTemp)

            audioP = AVPlayer(url: NSURL(string: AudioFileURLTemp.url!) as! URL)            
            audioP.play()        
        }       
    })
}
我在这行上得到了错误:

audioP = AVPlayer(url: NSURL(string: AudioFileURLTemp.url!) as! URL)

我找到了我出错的原因。这是因为有些歌名中有空格,但第一首歌的名字中没有空格。所以我尝试在浏览器中复制链接,看看浏览器如何处理空间。我发现它将空格替换为%20

所以我用“%20”替换了每个空格,现在它可以工作了

正确代码

func grabSong() {        
    let SongQuery = PFQuery(className: "Songs")
    SongQuery.getObjectInBackground(withId:iDArray[SelectedSongNumber] ,block: { (object : PFObject?, error : Error?) ->  Void in                    
        if let AudioFileURLTemp : PFFile = object?.value(forKey: "SongFile") as? PFFile {                       
            var songID = AudioFileURLTemp.url!.replacingOccurrences(of: " ", with: "%20")

            audioP = AVPlayer(url: URL(string:songID)!)
            audioP.play()
        }
    })
}

逐段检查:
AudioFileURLTemp.url
,然后将
NSURL(字符串:AudioFileURLTemp.url!)作为!URL
。如果您使用Swift 3,您是否必须在
NSURL
URL
之间切换?我想是的,如果我删除(as!URL),我会遇到这个错误“无法将类型为'NSURL'的值转换为预期的参数类型'URL”,并建议我添加为!URL。。。。我还检查了AudioFileURLTemp.url,它根据我单击的索引给我不同的歌曲链接。你不能使用
url(string:AudioFileURLTemp.url!)
?我可以使用“audioP=AVPlayer(url:url(string:AudioFileURLTemp.url!)”,但我遇到了同样的问题,第一个索引工作正常其余的我得到了相同的错误SWIFT有一个内置函数用于此:
。addingPercentEncoding(使用AllowedCharacters:.urlPathAllowed)
此功能的优点是它将处理其他可能最终出现在歌曲名称中的无效字符,如重音字符“é”对于角色集,您还可以使用一些不同的选项。