Swift 中的回调函数到 JSON 任务期间的 return 值

Callback function in Swift to return value during JSON task

我问了这个昨天关闭的问题,我得到了一个关于如何实现回调的类似问题。我仍在为此苦苦挣扎,并更新了我的代码以尝试使用它,但我似乎 运行 遇到了一系列问题。我想要做的就是 return results 的值作为 Array 以便我以后可以轻松地操纵它。有没有 better/easier 方法来完成我想要完成的事情?

该函数从前面的视图中获取一个数组参数,并使用其中的一些值推送到端点。所结果的。 JSON 是我想要作为数组获取的内容。当前错误当然是在 ViewDidLoad

中调用时未定义结果

编辑: 结果如下:

["BRLBGN": 0.4699, "BGNBRL": 2.1691]

ViewDidLoad中:

calculateRate(value: codesToConvert, completionHandler: results)

函数中:

func calculateRate(value: [String], completionHandler: (_ results: [String: Any])->()){

    let url = URL(string: "domain.com")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    let postString = "pairs=\(value[0] + value[2])&pairs=\(value[2]+value[0])"
    print(postString)
    request.httpBody = postString.data(using: String.Encoding.utf8)

    let task = URLSession.shared.dataTask(with: request) {(data, response, error) in
        do  {
            let jsonResult = try  JSONSerialization.jsonObject(with: data!)
            let results = jsonResult as! [String: Any]
            completionHandler(results)

        } catch {
            print(error)
        }
    }
    task.resume()
}

假设您在 calculateRate 方法中获得了正确的结果,请像这样调用方法 calculateRate(value:completionHandler:)

var arrayResults = [String:Any]()

calculateRate(value: ["a", "b", "c"]) {(results) in
    arrayResults = results
}

completionHandler 是一个 闭包 。因此,当调用 calculateRate 时,您需要传递一个 闭包 并接受类型为 [String:Any] 的参数 results

编辑:

同时在 calculateRate(value:completionHandler:) 方法的签名中添加 @escapingcompletionHandler

func calculateRate(value: [String], completionHandler: @escaping (_ results: [String: Any])->()){
    //rest of the code
}