我如何从NSURLSession.sharedSession() dataTaskWithRequest获取数据
您不能直接从异步任务返回数据。
Swift 2的解决方案是使完成处理程序如下所示:
class PostFOrData {
// the completion closure signature is (Nsstring) ->
func forData(completion: (Nsstring) -> ) {
if let url = NSURL(string: "http://210.61.209.194:8088/SmarttvWebServicetopmsoApi/GetReadlist") {
let request = NSMutableuRLRequest( URL: url)
request.HTTPMethod = "POST"
let postString : String = "uid=59"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession .dataTaskWithRequest(request) {
data, response, error in
if let data = data,
jsonString = Nsstring(data: data, encoding: NSUTF8StringEncoding)
where error == nil {
completion(jsonString)
} else {
print("error=\(error!.localizedDescription)")
}
}
task.resume
}
}
}
let pfd = PostFOrData
// you call the method with a trailing closure
pfd.forData { jsonString in
// and here you get the "returned" value from the asynchronous task
print(jsonString)
}
这样,仅当异步任务完成时才调用完成。这是一种无需实际使用即可“返回”数据的方法return
。
class PostFOrData {
// the completion closure signature is (String) ->
func forData(completion: @escaping (String) -> ) {
if let url = URL(string: "http://210.61.209.194:8088/SmarttvWebServicetopmsoApi/GetReadlist") {
var request = URLRequest(url: url)
request.httpMethod = "POST"
let postString : String = "uid=59"
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request) {
data, response, error in
if let data = data, let jsonString = String(data: data, encoding: String.Encoding.utf8), error == nil {
completion(jsonString)
} else {
print("error=\(error!.localizedDescription)")
}
}
task.resume
}
}
}
let pfd = PostFOrData
// you call the method with a trailing closure
pfd.forData { jsonString in
// and here you get the "returned" value from the asynchronous task
print(jsonString)
}
解决方法
class PostFOrData {
let url = NSURL( string: "http://210.61.209.194:8088/SmarttvWebServiceTopmsoApi/GetReadlist")
var picUrl = NSURL(string : "http://210.61.209.194:8088/SmarttvMedia/img/epi00001.png")
var responseString : NSString = ""
func forData -> NSString {
let request = NSMutableURLRequest( URL: url!)
request.HTTPMethod = "POST"
var s : NSString = ""
let postString : String = "uid=59"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession .dataTaskWithRequest(request) {
data,response,error in
if error != nil {
println("error=\(error)")
return
} else {
println("response = \(response!)")
self.responseString = NSString(data: data,encoding: NSUTF8StringEncoding)!
println("responseString = \(self.responseString)")
}
}
// I want to return NSString here,but I always get nothing
return self.responseString
}
}
有人知道如何从任务中获取数据吗?