Spotify iOS SDK Swift显示所有(!)播放列表(20+)

我能够很容易地在Swift中获得前20个播放列表。

func getPlaylists() { //DispatchQueue.global(qos: .userInitiated).async { let playListRequest = try! SPTPlaylistList.createRequestForGettingPlaylists(forUser: session.canonicalUsername, withAccessToken: session.accessToken) Alamofire.request(playListRequest) .response { response in let list = try! SPTPlaylistList(from: response.data, with: response.response) for playList in list.items { if let playlist = playList as? SPTPartialPlaylist { let currentPlaylist: PlaylistItem = PlaylistItem(playlistName: playlist.name, playlistURL: playlist.uri.absoluteString) self.playlists.append(currentPlaylist) } } self.tableView.reloadData() } 

到现在为止还挺好。 但是这(根据文档只提供了前20个播放列表。

如何通过添加一个嵌套的循环来获得更多(全部!)播放列表

  while list.hasNextPage == true { } 

重构C代码并不成功

提前致谢!

你不能用while循环来做,因为networking调用是asynchronous的。 您可以recursion地请求下一个页面,并且每当页面在完成处理程序中返回时重新加载表格。

假设你有以下属性

 var playlists = [SPTPartialPlaylist]() 

在你的getPlaylists函数中,你可以像这样(使用Alamofire的方式也可以):

  SPTPlaylistList.playlists(forUser: session.canonicalUsername, withAccessToken: session.accessToken, callback: { (error, response) in self.activityIndicator.stopAnimating() if let listPage = response as? SPTPlaylistList, let playlists = listPage.items as? [SPTPartialPlaylist] { self.playlists = playlists // or however you want to parse these self.tableView.reloadData() if listPage.hasNextPage { self.getNextPlaylistPage(currentPage: listPage) } } }) 

getNextPlaylistPage看起来像这样:

 func getNextPlaylistPage(currentPage: SPTListPage) { currentPage.requestNextPage(withAccessToken: AppDelegate.shared().auth?.session.accessToken, callback: { (error, response) in if let page = response as? SPTListPage, let playlists = page.items as? [SPTPartialPlaylist] { self.playlists.append(contentsOf: playlists) // or parse these beforehand, if you need/want to self.tableView.reloadData() if page.hasNextPage { self.getNextPlaylistPage(currentPage: page) } } }) } 

如果您想要更加符合您问题中的方法,可以使用Alamofire和SPTListPagecreateRequestForNextPageWithAccessToken函数的组合来构buildgetNextPlaylistPage

(请注意, SPTPlaylistListSPTPlaylistList的子类。)

我更新了SpotifyMetadata框架也已经过了几个月,所以上面的一些内容可能已经稍微改变了……但是一般的概念仍然是一样的。