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

Posted

技术标签:

【中文标题】Spotify iOS SDK Swift 显示所有 (!) 播放列表 (20+)【英文标题】:Spotify iOS SDK Swift display all (!) playlists (20+) 【发布时间】:2017-10-26 06:01:33 【问题描述】:

我能够在 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 代码不成功

提前致谢!

【问题讨论】:

【参考方案1】:

您不能使用while循环做到这一点,因为网络电话是异步的。您可以递归下一个页面请求,而不是,每一次重新加载表中完成处理页面的回报。 P>

假定有以下属性 P>

var playlists = [SPTPartialPlaylist]()

在您的getPlaylists功能,你可以有这样的事情(你有它使用Alamofire也能正常工作的方式): P>

            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看起来是这样的: P>

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)
            
        
    )

如果你想与你在你的问题有方法保持更做到这一点,你可以建立getNextPlaylistPage使用Alamofire的组合和SPTListPagecreateRequestForNextPageWithAccessToken功能。 P>

(注意,SPTPlaylistListSPTListPage的子类。) P>

它也经过了几个月,因为我更新了我的SpotifyMetadata框架,因此,上述的一些可能已经略有改变......但一般的概念是相同的。 P>

【讨论】:

萨曼莎你好,非常感谢您的回复 - 它的工作就像一个魅力!不胜感激!个。跨度> @萨曼莎,将ü请引导我***.com/questions/55021016/… 跨度>

以上是关于Spotify iOS SDK Swift 显示所有 (!) 播放列表 (20+)的主要内容,如果未能解决你的问题,请参考以下文章

Spotify SDK Demo Swift 可以工作,但不能翻译为基于 Storyboard 的项目

无法使用 Spotify iOS App Remote SDK 禁用自动播放

如何降低或提高 Spotify SDK Swift 中的音乐音量

如何使用 Spotify SDK 和 Swift 3 正确处理令牌刷新。错误代码 = 3840

Swift 3.0 中的 Spotify SDK:如何知道歌曲何时结束

Spotify SDK 播放器不工作:错误 Domain=com.spotify.ios-sdk.playback Code=1 “由于未指定的问题,操作失败。”