У меня есть эта функция в моем классе-помощнике.
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()
Вы создаете [Car] в начале, а затем вы вызываете обработчик async, а затем возвращаете [Car], а затем запускаете async. То, что сейчас происходит.
Если вы хотите установить массив для возвращаемых значений функций, вы должны добавить параметр inout: func requestAllCars(inout arr: [Car])
И на верхнем уровне внутри обработчика async вы делаете:
for subdecoder in decoders {
println("de autos \(subdecoder)")
arr.append(Car(subdecoder))
}
Это заполнит ваш массив, который вы передадите, как arr, когда будет запущен асинхронный процесс.
Итак, сделав это:
var carList = [Car]()
helperclass.requestAllCars(carList)
После запуска асинхронного автозабора будет заполнено.