所以我知道这可能有点具体,但我一直盯着我的代码,无法解决这个问题。基本上,我正在打一个网络电话给spotify,以获得一个特定的播放列表,并传递一个最终决定我返回歌曲数量的数字。代码基本如下:

    // A network call is made just above to return somePlaylist
    let playlist = somePlaylist as! SPTPartialPlaylist
    var songs: [SPTPartialTrack] = []

    // load in playlist to receive back songs
    SPTPlaylistSnapshot.playlistWithURI(playlist.uri, session: someSession) { (error: NSError!, data: AnyObject!) in

        // cast the data into a correct format
        let playlistViewer = data as! SPTPlaylistSnapshot
        let playlist = playlistViewer.firstTrackPage

        // get the songs
        for _ in 1...numberOfSongs {
            let random = Int(arc4random_uniform(UInt32(playlist.items.count)))
            songs.append(playlist.items[random] as! SPTPartialTrack)
        }
    }

问题出在初始化随机的代码部分。在对这个函数的20次调用中,可能有1次,无论如何,我都会为playlist.items.count打开一个nil值,但似乎不知道为什么。也许这是一些我不明白的关于API调用的事情,或者是一些我没有看到的事情,但是我似乎无法理解。
有人对解决这个问题或如何调试这个问题有什么建议吗?

最佳答案

好吧,在仔细研究之后,我似乎已经解决了这个问题。下面是我在代码中实现的错误处理。

if let actualPlaylist = playlist, actualItems = actualPlaylist.items {
        if actualItems.count == 0 {
            SongScraper.playlistHasSongs = false
            print("Empty playlist, loading another playlist")
            return
            }

        for _ in 1...numberOfSongs {
            let random = Int(arc4random_uniform(UInt32(actualItems.count)))
            songs.append(actualPlaylist.items[random] as! SPTPartialTrack)
        }

        completionHandler(songs: songs)
    }
    else {
        print("Returned a nil playlist, loading another playlist")
        SongScraper.playlistHasSongs = false
        return
    }

关于swift - 在对Spotify进行API调用后意外展开了一个可选变量以找到nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38650843/

10-12 00:34
查看更多