J'essaie d'apprendre Swift, et j'ai un petit projet avec Google API lieux.Résultats URLSession dans les données NIL
J'ai une méthode pour récupérer des détails lieux, qui utilise URLSession en rapide pour envoyer la demande:
func fetchRestaurantDetails(placeId: String) -> Void {
let jsonURLString = "https://maps.googleapis.com/maps/api/place/details/json?placeid=\(placeId)&key=[MY API KEY]"
guard let url = URL(string: jsonURLString) else { return}
let urlRequest = URLRequest(url: url)
// set up the session
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
_ = session.dataTask(with: urlRequest) { (data, response, error) in
// check for any errors
guard error == nil else {
print("error calling GET on /todos/1")
print(error!)
return
}
// make sure we got data
guard let responseData = data else {
print("Error: did not receive data")
return
}
// parse the result as JSON, since that's what the API provides
do {
let place = try JSONDecoder().decode(Result.self, from: responseData) // New in Swift 4, used to serialize json.
self.rest = place.result
} catch {
print("error trying to convert data to JSON")
return
}
}.resume()
}
J'utilise cette méthode pour créer une instance de restaurants de type, que je vais plus tard ajouter à une liste :
func createRestaurant(placeId: String) -> Restaurants {
self.fetchRestaurantDetails(placeId: placeId)
let rest = Restaurants(name: self.rest.name,
formatted_address: self.rest.formatted_address,
website: self.rest.website,
location: ((self.rest.geometry.location.lat,self.rest.geometry.location.lng)),
opening_hours: self.rest.opening_hours.weekday_text,
photo: restImg)
return rest!
}
Mais chaque fois que j'arrive de nouveau dans les "let repos = Restaurants (...)" toutes les valeurs sont nulles. Lorsque j'essaie de le déboguer, il saute simplement sur mes sections "_ = session" jusqu'à resume(), puis de nouveau à la session et se termine à resume(). Aucune donnée produite. Je suis assez perplexe depuis que j'ai exécuté ce morceau de code avec succès, et maintenant je me demande si j'ai raté quelque chose. Thx :-)
Merci! C'était aussi mon propre sentiment initial, mais je suppose que je ne pouvais tout simplement pas envelopper ma tête autour des gestionnaires d'achèvement! THX. – monkally