在初始化之前由闭包捕获的变量(结果)

Variable (results) captured by a closure before being initialized

我正在尝试使用 for 循环和 Google 地点 API 来查找地点 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()
}
}

错误是因为您没有初始化结果数组, 简单的解决方案可以是这个

像这样声明你的结果数组

var results = [Any]()

我认为你应该这样做:

你应该像这样在 viewDidLoad 方法之外将结果声明为实例变量

var results = [Any]()

然后如下在闭包中使用这个变量,因为我认为你在代码的其他部分需要这个结果

self.results.append(result)