在初始化之前由闭包捕获的变量(结果)
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)
我正在尝试使用 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)