您不能直接从异步任务返回数据。
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 inif 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 closurepfd.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 inif 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 closurepfd.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 nothingreturn self.responseString }}
有人知道如何从任务中获取数据吗?