在继续之前,如何等待操作完成?

时间:2018-10-07 16:13:42

标签: swift asynchronous alamofire return-value dispatch-queue

我有一个主要功能(buttonPressed),应该打印出一个Jsonfile。

func buttonPressed {
    var jasonFile = JSON()
    jasonFile = getInfo(parA: 5, parB: 10) //1. takes some time
    print(jsonFile) //prints before the JSON is get from the internet
}

要获取Jsonfile,我创建了一个函数,该函数接受参数并下载信息并返回Jsonfile。 当然,这需要花费相当长的时间,因此即使myFunction中的代码尚未接收到数据,也已经执行了。

(我正在使用Alamofire和SwiftyJSON)

func getInfo(parA: Int, parB: Int) -> [Int] {
var thisJsonFile = JSON()
Alamofire.request(url, method: .get).validate().responseJSON { response in
        switch response.result {
        case .success(let value):
            let json = JSON(value)
            thisJsonFile = json
        case .failure(let error):
            print(error)
        }
    }
return thisJsonFile //returns an empty File
}

有没有办法在完成加载后返回JsonFile?

1 个答案:

答案 0 :(得分:-1)

谢谢您的回答,我找到了一个对我有用的解决方案:

我还安装了Alamofire_Synchronous。 我的函数的代码现在是:

func getInfo(parA: Int, parB: Int) -> [Int] {
    let response = Alamofire.request(url).responseJSON()
    switch response.result {
    case .success(let value):
        let json = JSON(value)
        return json
    case .failure(let error):
        print(error)
        return JSON()
    }
}