Не удается перебрать элементы SPTPlaylistList - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь получить доступ ко всем плейлистам пользователя Spotify

 let request2: URLRequest = try! SPTPlaylistList.createRequestForGettingPlaylists(forUser: self.username, withAccessToken: accessToken)
    print(request2)
    SPTRequest.sharedHandler().perform(request2) { (error, response, data) in
        if error == nil {
            print(response)
            let playlists = try! SPTPlaylistList(from: data, with: response)
}else{
            print(error)
        }
    }

И я могу видеть плейлисты, если я печатаю «плейлисты»

some([<SPTPartialPlaylist: 0x10aa854d0>: john mayer [2 tracks] (spotify:user:virajdeshpande88:playlist:3BLBrqb3CURu5KFPqdYqd1), <SPTPartialPlaylist: 0x10aa922a0>: beatles [2 tracks] (spotify:user:virajdeshpande88:playlist:2t6z8KEhZGzY7Tqvy8QoW4)])

Но я не могуполучить доступ к плейлистам по отдельности или перебирать playlists.items.Если я сделаю следующее:

print (playlists.items[0])

я получу «Неожиданно найденный ноль при развертывании необязательного значения».

Обновление: я пытался использовать playlistsForUser: withAccessToken: callback: и теперь я могу получить доступ ко всем плейлистам пользователя.Но кажется, что это работает, только если следующий блок кода находится внутри блока if {} фрагмента кода, который я разместил выше.Если этот блок размещен сам по себе, я снова получаю ошибку nil.

    SPTPlaylistList.playlists(forUser: self.username, withAccessToken: accessToken, callback: {(error, playlist_list)  in
    if error == nil {
        let list = playlist_list as! SPTPlaylistList
        print(list.items[0])
        print(list.items[1])
        let playlist = list.items[0] as! SPTPartialPlaylist
        print(playlist.name)
    }else{
        print("latest error")
       }
})

1 Ответ

0 голосов
/ 08 июня 2018

Следует избегать принудительного развертывания !.

    if let request2: URLRequest = try? SPTPlaylistList.createRequestForGettingPlaylists(forUser: self.username, withAccessToken: accessToken){
        print(request2)
        SPTRequest.sharedHandler().perform(request2) { (error, response, data) in
            if error == nil {
                print(response)
                if let playlists = try? SPTPlaylistList(from: data, with: response) {
                    playlists.forEach{ playlist in
                        print(playlist)
                        // do thing with your each playlist
                    }
                }
            }else{
                print(error)
            }
        }
    }
...