2017-09-03 2 views
0

J'essaie d'utiliser une boucle for et l'API Google Places pour rechercher un tableau d'ID de lieu comme ci-dessous. Le code est la plupart du temps sans erreur, cependant, j'ai des problèmes avec mes fermetures ou l'erreur ci-dessus. Je ne sais pas lequel c'est en ce moment - toute aide serait grandement appréciée!Variable (résultats) capturée par une fermeture avant d'être initialisée

let mexican = ["ChIJM8S9ACvoIogRmzYiLgzlP_g", 
"ChIJwSHwoNTpIogRyElYj-kHC14", 
"ChIJDWRMYifoIogR7S6U4tryodY", 
"ChIJqSVd6yfoIogRmTgBSoO4Z0k", 
"ChIJLacWlinoIogRVGYk-bZbGUE", 
"ChIJSUC9S2zCIogRTKyiW0q_6tI"] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    placesClient = GMSPlacesClient.shared() 

    var place: [String] 

    var results: Array<Any> 

    switch index.row 
    { 
    case 0 : 
     place = international 
    case 1 : 
     place = american 
    default : 
     place = mexican 
    } 


    for id in place 
    { 
     placesClient.lookUpPlaceID(id, callback: { (result, error) -> Void in 

      if let error = error { 
       print("lookup place id query error: \(error.localizedDescription)") 
       return 
      } 

      guard let result = result 

      else 
      { 
      print("No place details for \(id)") 
      return 
      } 
    results.append(result) 
    }) 
} 
} 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
} 
+0

vous devez initialiser les résultats, utilisez cette var résultats = [Tous]() au lieu de var résultats: Array , et voir son comportement – 3stud1ant3

Répondre

2

erreur est parce que vous n'êtes pas initialisant le tableau de résultats, solution simple peut être ce

Déclarez vos résultats tableau comme cette

var results = [Any]() 

Je pense que vous devriez faire ceci:

vous devez déclarer les résultats comme variable d'instance comme ceci à l'extérieur viewDidLoad méthode

var results = [Any]() 

utiliser cette variable à l'intérieur de la fermeture comme suit parce que je pense que vous avez besoin de ce résultat dans d'autres parties de votre code

self.results.append(result) 
+0

Merci pour la portée à nouveau, Stud. Je dois regarder dans les concepts d'initialisation. Quoi qu'il en soit, alors que l'erreur de la fonction LookUpID disparaît, quand j'essaie d'entrer "self.results.append (result)", je reçois la valeur de type FoodTwo n'a pas de résultat sur la même ligne. – jonpeter

+0

@jonpeter Avez-vous déclaré des résultats en dehors de la méthode viewDidLoad? parce que cette erreur dit que la classe dans laquelle vous êtes (ce que je pense est FoodTwo) n'a aucun résultat tableau – 3stud1ant3

+0

Pourquoi suis-je incapable de le déclarer dans viewDidLoad? Les variables globales sont-elles toutes déclarées à propos de cette fonction? – jonpeter