Swift HTTP请求,返回值



我对Swift还是有些陌生。但我想用Swift实现一个HTTP请求。我的问题是,我无法返回返回值,因为函数是异步运行的。因此,只有通过print((的输出才有效。我已经尝试添加async和wait。不过,不要再进一步了。

这是我的代码:

import SwiftUI
func HTTPRequest(parameter: String, app_url: String) -> String{
let session = URLSession(configuration: .default)
let url = URL(string: "http:10.203.24.212/"+app_url)!
var request = URLRequest(url: url)
var return_value = ""
request.httpMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpBody = parameter.data(using: .utf8)
let task = session.dataTask(with: request) { data, response, error in
if let data = data {
return_value = (String(data: data, encoding: .utf8)!)
print(return_value)
}
}
task.resume()
return return_value
}

您必须使用完成处理程序而不是返回。

func HTTPRequest(parameter: String, app_url: String, userCompletionHandler: @escaping (String?){
let session = URLSession(configuration: .default)
let url = URL(string: "http:10.203.24.212/"+app_url)!
var request = URLRequest(url: url)
var return_value = ""
request.httpMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpBody = parameter.data(using: .utf8)
let task = session.dataTask(with: request) { data, response, error in
if let data = data {
return_value = (String(data: data, encoding: .utf8)!)
print(return_value)

userCompletionHandler(return_value)
}
}
task.resume()
}

并使用它:

HTTPRequest(parameter: "xxx", app_url: "xxx", userCompletionHandler: { returnReponse in

let data = returnReponse
...


})

最新更新