在 API 调用 Spotify 后,意外地解开一个可选值以找到一个 nil

Unexpectedly unwrapping an optional to find a nil after an API call to Spotify

所以我知道这可能有点具体,但我一直盯着我的代码看,无法解决这个问题。基本上,我正在通过网络调用 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
    }