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