唯一的问题是,我不知道如何在完成后返回数据。
如何为以下函数创建完成处理程序?
func postToServer(postURL: String, postString: String) {
let request = NSMutableURLRequest(URL: NSURL(string: postURL)!)
request.HTTPMethod = "POST"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
let responseString = String(data: data!, encoding: NSUTF8StringEncoding)
if responseString != nil {
print("responseString = \(responseString!)")
}
}
task.resume()
}
编辑:也许我没有正确应用它,但建议的重复链接并没有解决我的问题。有人可以提供一个例子吗?我已经坚持了3个星期了。我不知道如何在任务完成时从任务中提取数据。我一直在阅读关于封闭的很多内容,但我不知道这些内容在哪里甚至是如何相关的。当我尝试查找与任务相关的功能时,它只会给出响应...如果我在恢复后不在sleep(3)
键入,则返回nil。
我观看了一系列视频,其中人们拥有与我相同的代码,并且没有使用完成处理程序,仍然可以获取数据......是什么给出了?
答案 0 :(得分:2)
这适用于swift 3
func postToServer(_ completion:@escaping (( _ response: String, _ success: Bool )-> Void), postURL: String, postString: String) {
let request = NSMutableURLRequest(url: NSURL(string: postURL)! as URL)
request.httpMethod = "POST"
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request as URLRequest){
data, response, error in
let responseString = String(data: data!, encoding: String.Encoding.utf8)
if responseString != nil {
print("responseString = \(responseString!)")
completion(responseString!, true)
}
}
task.resume()
}
}