2017-09-03 85 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