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:)
方法的签名中添加 @escaping
和 completionHandler
。
func calculateRate(value: [String], completionHandler: @escaping (_ results: [String: Any])->()){
//rest of the code
}
我问了这个昨天关闭的问题,我得到了一个关于如何实现回调的类似问题。我仍在为此苦苦挣扎,并更新了我的代码以尝试使用它,但我似乎 运行 遇到了一系列问题。我想要做的就是 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:)
方法的签名中添加 @escaping
和 completionHandler
。
func calculateRate(value: [String], completionHandler: @escaping (_ results: [String: Any])->()){
//rest of the code
}