处理函数中的完成处理程序

时间:2015-03-09 20:05:48

标签: ios xcode swift

我的助手类中有这个功能。

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()

1 个答案:

答案 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。