2017-09-03 3 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結果の代わりに:配列とその動作を参照してください – 3stud1ant3

答えて

2

エラーがあり、 簡単な解決策は、この

は、私はあなたがこれを行うべきだと思います。この

var results = [Any]() 

のようなあなたの結果の配列を宣言することができます。

結果をこのようなインスタンス変数として宣言する必要があります。viewDidLoadメソッド

var results = [Any]() 

次のように私はあなたのコード

self.results.append(result) 
+0

再び、スタッドのおかげで、ありがとう。病気は初期化の概念を調べなければなりません。とにかく、 "self.results.append(結果)"を入力しようとすると、LookUpID関数のエラーが消えてしまいましたが、FoodTwo型の値は同じ行にメンバーの結果がありません。 – jonpeter

+0

@jonpeter viewDidLoadメソッドの外部に結果を宣言しましたか?なぜなら、このエラーはあなたがいる(私がFoodTwoだと思う)クラスが結果配列を持っていないと言っているからです。 – 3stud1ant3

+0

viewDidLoadで宣言できないのはなぜですか?グローバル変数はすべてこの関数について宣言されていますか? – jonpeter

関連する問題