2017-09-03 82 views
0

我试图使用for循环和Google Places API来查找如下所示的Place ID的数组。代码大部分没有错误,但是,我的关闭或上述错误都有问题。我不确定这是什么时候 - 任何援助将不胜感激!在初始化之前由闭包捕获的变量(结果)

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

您需要初始化的结果,此语句VAR的结果=使用内关闭该变量[任意]()而不是var结果:Array ,并查看其行为 – 3stud1ant3

回答

2

错误是因为你没有初始化的结果阵列, 简单的解决方案可能是这个

声明你的结果阵列这样

var results = [Any]() 

我认为你应该这样做:

你应该声明结果为这样的实例变量viewDidLoad方法

var results = [Any]() 

然后如下,因为我认为你需要这个结果在您的代码的其他部分

self.results.append(result) 
+0

再次感谢您的覆盖面,Stud。我不得不研究初始化概念。无论如何,当LookUpID函数错误消失时,当我尝试输入“self.results.append(result)”时,我收到类型的值FoodTwo在同一行上没有成员结果。 – jonpeter

+0

@jonpeter您是否在viewDidLoad方法之外声明了结果?因为这个错误是说你所在的课程(我认为是FoodTwo)没有结果array – 3stud1ant3

+0

为什么我无法在viewDidLoad中声明它?全局变量是否都声明了这个函数? – jonpeter