我的助手类中有这个功能。
func requestAllCars() -> [Car] {
var carList = [Car]()
let username:String = prefs.valueForKey("USERNAME") as String
let apikey:String = prefs.valueForKey("APIKEY") as String
self.requestObject(.getCarsUrl, params: ["apikey":apikey, "username":username], completionHandler: {( response, error ) in
if let response = response {
let decoder = JSONDecoder(response.responseObject!)
if let decoders = decoder.array {
carList.removeAll(keepCapacity: false)
for subdecoder in decoders {
println("de autos \(subdecoder)")
carList.append(Car(subdecoder))
}
}
}
})
return carList
}
但它并没有填充carList。我猜是因为异步调用..当我这样做时,我该如何解决?
var carlist = helperclass.requestAllCars()
答案 0 :(得分:1)
您在开始时创建[Car],然后调用异步处理程序,然后返回[Car],然后运行异步。那就是目前发生的事情。
如果要将数组设置为该函数返回值,则必须添加inout参数:func requestAllCars(inout arr: [Car])
在异步处理程序内的顶层:
for subdecoder in decoders {
println("de autos \(subdecoder)")
arr.append(Car(subdecoder))
}
这将填满您在运行异步时作为arr传递的数组。
通过这样做:
var carList = [Car]()
helperclass.requestAllCars(carList)
运行异步后,将填充carList。