Обрабатывать обработчик завершения в функции

-2

У меня есть эта функция в моем классе-помощнике.

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()
Теги:
xcode

1 ответ

1

Вы создаете [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)

После запуска асинхронного автозабора будет заполнено.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню