swift - 关于 URLSession 的 HTTP 请求封装的问题
本文介绍了swift - 关于 URLSession 的 HTTP 请求封装的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
正在学习swift,想用URLSession封装一个简单的GET请求类,代码如下
func myreq(url:String) -> JSON{
var myjson:JSON = []
let myurl = URL(string:url)
var request = URLRequest(url:myurl!)
request.httpMethod = "GET"
let session = URLSession.shared
let dataTask = session.dataTask(with:request, completionHandler:{ (data, response, error) in
if error != nil{
print(error!)
}else{
myjson = JSON(data!)
//print(myjson)
}
})
dataTask.resume()
print(myjson)
//返回一个JSON
return myjson
}
这样是无法得到结果的(下面的myjson打印为空,但是放到上面打印就可以得到结果),请问我该怎么改进?
解决方案
下面的print
是在主线程中执行的, 上面的print
是在子线程中请求得到响应后, 再切换到主线程中执行.
改进:
func myreq(url:String, completion: @escaping (JSON?, Bool) -> ()){
var myjson:JSON? = []
let myurl = URL(string:url)
var request = URLRequest(url:myurl!)
request.httpMethod = "GET"
let session = URLSession.shared
let dataTask = session.dataTask(with:request, completionHandler:{ (data, response, error) in
if error == nil {
print(error!)
} else {
myjson = JSON(data!)
}
completion(myjson, isSuccess)
})
dataTask.resume()
}
调用:
myreq(url: "url") { (json, isSuccess) in
print(json ?? "nil")
}
这篇关于swift - 关于 URLSession 的 HTTP 请求封装的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文