Je travaille avec l'API GoogleMaps, cela renvoie 20 emplacements à proximité et jusqu'à 60 emplacements peuvent être retournés. Les emplacements sont retournés avec un nextPageToken qui vous permet d'obtenir la page de résultats suivante (20 par page). J'essaie de parcourir l'API pour obtenir toutes les adresses disponibles mais j'ai de la difficulté: func getAllNearbyLocations (url: URL) {Boucle sur une requête API mettant à jour l'URL
J'utilise Alamofire pour retourner la requête API (j'ai également essayé d'utiliser URLSessions)
d'abord, je mis en place une fonction qui renvoie le dictionnaire JSON dans le bloc d'achèvement
// This function returns the JSON from a specific URL
func getJsonFromURL(url: URL, completionHandler: @escaping (NSDictionary) ->()) {
Alamofire.request(url).responseJSON { response in
let json = response.result.value as! NSDictionary
completionHandler(json)
}
}
Ensuite, nous avons une fonction getNearByLocation que nous initialise avec une URL. Comme vous pouvez le voir, nous retournons les résultats, les ajoutons à un tableau, vérifions si nous avons le nombre maximum de résultats (60) ou si nous n'avons plus de nextPageToken. Si l'un d'entre eux est faux, nous créons la nouvelle URL et déclenchons la fonction dans laquelle nous sommes actuellement. La boucle se termine lorsque nous retournons tous les nouveaux emplacements. La chose étrange est quand je teste le code avec des points d'arrêt, il renvoie comme prévu. Il boucle à travers la fonction, ajoute tous les nouveaux emplacements et retours. Lorsque je l'exécute en temps réel, le dictionnaire renvoyé ne retourne pas correctement (ne contient pas les emplacements ou le jeton de page suivant) et donc ma fonction ne renvoie que les 20 premiers emplacements.
J'ai déjà utilisé des requêtes d'API mais je n'ai jamais été si proche les unes des autres. Je pense que c'est une erreur 22 car je ne peux pas connaître la nouvelle pageToken jusqu'à ce que j'ai appelé la demande et dès que j'ai renvoyé la demande, je veux appeler la demande avec ce jeton immédiatement.